늘 그렇듯이 이는 절충안이며 저는 표준과 예측 가능성 측면에서 실수를 범했습니다.나는 특히 다음과 같은 단일 목적 Python 컨테이너의 경우 다음과 같은 점을 잘 알고 있습니다.파이썬:.*모든 것을 전역적으로 설치하고 다단계 빌드를 수행하는 것이 인기가 있습니다.복사

~ 위에사이트 패키지Python 설치 과정에서 시작하거나파이썬사용자베이스환경변수다음과 같은 것/앱, 그리고 사용pip 설치 --사용자대신에핍 설치, 그런 다음복사~ 위에저것.모두 더 간단하고 한 계층의 격리만으로 충분하다는 전제하에 이루어졌습니다.나는 한 계층의 격리만으로 충분하다는 점에 대해 이의를 제기하지는 않지만, 수년에 걸쳐 프로덕션에서 단순성에 관해 이야기할 때 염두에 두어야 할 측면이 한 가지 이상이라는 것을 알게 되었습니다.전반적인 주제로서 나의 목표는 다음과 같습니다.~ 아니다

대형 기술 개발자 옹호자가 컨퍼런스에서 그렇게 말했기 때문에 의심스러운 보상에 복잡성을 추가하는 일부 ~모범 사례~를 무심코 따르는 것입니다.


하지만 나는 그것에 대해 생각하는데 많은 시간을 보낸다.2차 효과내가 하는 일의.나에게 복잡성은 얼마나 많은 키를 눌러야 하는지가 아니라 내가 하고 있는 일의 결과를 추론하는 것이 얼마나 어려운지에 관한 것입니다.제가 여전히 가상 환경을 사용하고 앞으로도 그렇게 할 계획인 이유에 대한 불완전한 목록은 다음과 같습니다.

예측 가능성과 친숙성

해당 구조는 잘 정의되어 있으며 단일 Python 애플리케이션을 보유하도록 설계되었습니다.

다음을 포함하는 디렉터리 계층 구조가 마음에 듭니다.

큰 상자,lib, 그리고공유하다기본적으로 자체 포함 애플리케이션을 위한 훌륭한 '컨테이너'가 됩니다.추가 구성 파일을 포함하여 보조 파일의 저장을 초대합니다.예배 규칙서.무엇인가에 넣기에 매우 적합하도록 만드는 모든 것/선택/앱또는/앱.

예,10년 전과는 다르게, 더 이상 시스템 Python에서 애플리케이션을 격리할 필요가 없습니다.하지만 유지당신의격리되고 잘 정의된 위치와 구조의 코드는 그 자체로 가치가 있습니다.저는 수십 가지 서비스를 담당하고 있어서 감사하게 생각합니다.

일관성내가 배포하는 모든 것이 여기에 있다는 것을 아는 것/앱, Python 애플리케이션인 경우 가상 환경이라는 것을 알고/앱/빈/파이썬, 내 애플리케이션을 가져오고 실행할 준비가 된 가상 환경인 Python을 얻습니다.표준 및 통신

이 모든 일관성이

팀 내 및 팀 간 커뮤니케이션더 쉽습니다.배포 아티팩트가 가상 환경이라고 말하거나 문서화하면 그것이 무엇을 의미하는지 모두가 알고 있습니다.그렇지 않다면 인터넷은 다음을 포함한 문서로 가득 차 있습니다.공식적인 것.언제 그랬냐는 듯검은색코드 스타일에 대한 생각과 논쟁을 멈추고 더 중요한 일에 정신적 자원을 확보했습니다.1.비록 표준의 모든 것이 마음에 들지 않더라도 그것이 바로 표준의 궁극적인 가치입니다.

그리고 가상 환경은핵심 Python 기능12년 동안2000년대 중반 이후 Python 커뮤니티의 핵심 개념입니다.그것은 우리가 가지고 있는 가장 가까운 것입니다.Python에서 동봉되고 표준화되었으며 잘 이해된 애플리케이션 빌드 아티팩트.확장된 비유이지만 컴파일된 언어에서 동적 바이너리를 연결한 결과라고 생각합니다.

당신은 그들을 사용할 수 있습니다장소 상에서, 다음을 사용하여 배포할 수 있습니다.배포판 패키지, 그리고 당신은 할 수 있습니다Docker 컨테이너를 사용하여 배포.그것은좋은개발과 프로덕션에서 동일한 도구와 기본 요소를 사용합니다.이는 도구를 알고 있고 염두에 두어야 할 사항이 적다는 것을 의미합니다.따라서 다른 방법을 사용하여 애플리케이션을 배포하는 것이 실질적인 이점을 가져다 줄 것입니다.

가져오기 복잡성 축소

로컬과 Docker 모두에서 가상 환경의 일반적인 장점은 다음과 같습니다.관련 검색 경로 좁히기Python이 가져올 코드를 찾는 위치2.Python 실행통과하여 격리 모드-나 이 범위를 더욱 좁힐 것입니다.

그래서,만약에a) 전 세계적으로 아무것도 설치하지 마십시오3,그리고b) 당신은파이썬가상 환경의 바이너리~하는 동안그것을 전달-나, 너알다표준 라이브러리에 없는 모든 것~ 해야 하다가상 환경에 있어야 합니다.이로 인해 Python의 가져오기 동작이 훨씬 더 다양해졌습니다.예측 가능한가져오기 문제를 디버깅하면 살인 미스터리가 줄어듭니다.

이는 우리에게 다음과 같은 결과를 가져옵니다...

무시해도 무방하지만 가슴에서 벗어나야 할 보너스 포인트

지옥에는 내가 느끼는 것과 같은 분노가 없습니다pip 설치 --사용자.이는 Python의 나쁜 패키징 평판에 많은 피해를 입힌 매력적인 골칫거리입니다.

주로 시스템 조작으로 인한 더 나쁜 결과를 설명하는 데 사용됩니다.사이트 패키지디렉토리는 Python 설치가 중단되는 가장 일반적인 원인입니다.사용자 로컬 설치를 활성화하려면 모두4, 이는 처음부터 나쁜 생각입니다.그런 의미에서,npm프로젝트-디렉토리-로컬 우선 패키징을 갖춘 생태계는 우리보다 훨씬 앞서 있었고, 우리의 낡고 게으른 방식에 갇혀 있었습니다.

결국에는 다음을 추가하여 Python 설치에 대한 추론을 더욱 복잡하게 만들었습니다.또 다른움직이는 부분.사용자 로컬 Python 패키지의 이상한 내용으로 인해 버그 추적기에서 누군가가 나에게 소리를 지를 때마다 돈이 있었다면 그럴 필요가 없었을 것입니다.후원을 구걸하다.내가 사랑하는 만큼PDM, 나는 매일 Cthulhu에게 감사합니다.PEP 582 /__py패키지__추가할 수 있다는 이유로 거부되었습니다.또 다른혼란의 벡터.프로젝트-로컬 표준화.venv비록 그것이 명백히 옳은 조치였더라도가상 환경을 중앙 위치에 저장하는 것을 선호합니다.

마지막으로: 예를 들면… 도대체 왜요?

여기서 정확히 어떤 문제를 해결하려고 하시나요?이는 추가 도구나 추가 개념이 아닙니다.표준 라이브러리또는 현재 사용 중인자외선이미.와 함께자외선 차단제, 가상 환경을 만드는 데는 기존보다 눈에 띄게 시간이 오래 걸리지 않습니다.mkdir.그들은 그럴 수도 있다약간더 크지만 실제로 중요한 방식인가요?모든 종속성을 포함하는 Python 프로젝트를 처리하기 쉬운 디렉터리로 격리하는 하나의 표준 방법을 피함으로써 아무것도 더 간단하게 만들 수 없습니다.

가상환경에 대한 저항이 얼마나 기술적인 이유는 없지만, 그 이유가 무엇인지 궁금합니다.Homebrew는 모든 Python 업데이트에서 이를 깨뜨립니다.그리고 데비안은 Python 설치 번들을 해제하는 귀찮은 작업을 사용하기 어렵게 만듭니다.

나는 바란다자외선편리함과 속도가 대중의 인식을 바꿀 것입니다.

발문

기사 시작 부분에서 설명한 단축키는 다음에 대한 가정에 의존합니다.사이트 패키지위치와 휴대성.사용과 같은 합병증이 발생합니다.pip 설치 --사용자(Docker에서는 의미상 이상하며 이와 같은 용도로 사용되지 않음) 개발에 사용하는 것과 비교하여 익숙하지 않은 도구와 패러다임이 필요할 수 있습니다.âââââââââââ...

하지만나는 당신이 어떤 일을 하도록 설득하려는 것이 아닙니다.나는 내 이유 중 일부가 실체가 없는 ~느낌~ 측면에 있다는 것을 알고 있습니다.이러한 단축키의 범위 내에 있고 장단점이 만족스러우면 원하는 것을 자유롭게 수행할 수 있습니다.하지만 그게 확실하다는 걸 보여줬으면 좋겠어하다일반적으로 Docker에서 가상 환경을 사용하는 것이 합리적인지 여부, 는결정하다.나는 매번 내 자신을 변호하는 것이 지겨워서 여기서 영원히 내 주장을 펼치겠습니다.

결국 당신이아직Python과 Docker에 관해 내가 말해야 할 내용에 관심이 있으면 다음으로 시작하는 것이 좋습니다.프로덕션에 즉시 사용 가능한 Docker 컨테이너자외선는 Python 애플리케이션용 Docker 컨테이너를 최대한 빨리 구축하는 방법을 보여주는 살아있는 문서입니다.


추신제가 존경하는 분의 탄생 10주년이 되는 날에 이 글을 출판한다는 게 믿기지 않습니다.âvirtualenv 라이브!!더 나은 방향으로 많은 변화가 있었지만 가상 환경은 계속해서 발전하고 있습니다.

이 포스팅은 님의 도움으로 작성되었습니다기부나의 공공 사업을 높이 평가하는 사람들과 기업으로부터.

이와 같은 콘텐츠를 더 원하시나요?여기 내 무료, 저용량, 소름 끼치지 않는 것이 있습니다.하이넥이 뭔가를 했어요회람 신문!이를 통해 내 콘텐츠를 귀하와 직접 공유하고 추가적인 맥락을 추가할 수 있습니다.