ubuntu + virtualenv = 엉망? VirtualEnv는 Dist-Packages를 싫어하고 사이트 패키지를 원합니다

StackOverflow https://stackoverflow.com/questions/1215610

문제

Ubuntu 9.04의 Python으로 무슨 일이 일어나고 있는지 설명해 주시겠습니까?

나는 회전하려고합니다 virtualenv, 그리고 --no-site-packages 깃발은 우분투와 아무것도하지 않는 것 같습니다. 설치했습니다 virtualenv 1.3.3 ~와 함께 easy_install (내가 업그레이드 한 setuptools 0.6c9) 그리고 모든 것이 설치된 것 같습니다 /usr/local/lib/python2.6/dist-packages

추정하다 apt-get을 사용하여 패키지를 설치할 때 /usr/lib/python2.6/dist-packages/ ?

문제는 a가 있다는 것입니다 /usr/local/lib/python2.6/site-packages 또한 그냥 비어 있습니다. (를 보면서 path 안에 virtualenv) 이것은 Virtualenv가 백업으로 사용하는 폴더입니다. 따라서 내가 생략했다고 생각했다 --no-site-packages, 나는 내 VirtualEnV에서 내 지역 시스템 패키지에 액세스 할 수 없습니다.

그래서 내 질문은 다음과 같습니다.

  1. 어떻게 내가 가질까 virtualenv 하나를 가리킨다 dist-packages?
  2. 어느 Dist-Packages를 가리키야합니까? /usr/lib/python2.6/dist-packages 또는 /usr/local/lib/python2.6/dist-packages/
  3. 요점은 무엇입니까 /usr/lib/python2.6/site-packages? 거기에 아무것도 없습니다!
  4. 먼저 길에서 첫 번째로 제공됩니까? 최신 버전의 패키지 XYZ가 설치된 경우 /usr/local/lib/python2.6/dist-packages/ 그리고 나이든 (Ubuntu repos/apt-get) /usr/lib/python2.6/dist-packages, 어느 쪽이 수입 될 때 import xyz? 이것이 경로 목록을 기반으로한다고 가정합니다.
  5. 도대체 왜 그렇게 혼란스러워? 내가 여기서 놓친 것이 있습니까?
  6. 어디에 정의되어 있습니까? easy_install 설치해야합니다 /usr/local/lib/python2.6/dist-packages?
  7. 이것이 영향을 미칩니다 pip 또한?

이것을 정리할 수있는 사람에게 감사합니다!

도움이 되었습니까?

해결책

나는 사이트 패키지를 Dist-Packages에 대한 링크로 만들어 해킹하려는 유혹을 받고 있지만, 이것은 Ubuntu Dist 이외의 확장을 설치하려는 다른 경우에 영향을 줄 수 있다고 생각합니다. Virtualenv의 소스를 조정하는 것 외에는 1에 대한 또 다른 답변을 생각할 수 없습니다 (Ubuntu와 Virtualenv가 너무 인기가 있기 때문에 이미 조정 된 버전이 존재하는 것에 놀라지 않을 것입니다).

RE 2,/usr/local/bin/python을 사용하는 경우/USR/로컬 버전의 LIB (사이트 패키지 포함)를 사용해야하며 반대로/usr/bin/python을 사용하는 경우 반대로.

RE 3, 소스에서/usr/bin/python (easy_install 또는 Ubuntu의 배포판을 통해)에 대한 확장자를 설치 한 경우 무언가가있을 것입니다.

RE 4, 예, 경로의 이전 항목이 우선합니다.

re 5, easy_install은 그 이름으로 만 쉽습니다. 그것은 너무 많은 어두운 마법을 일으켜 우리의 편의성에 대한 합의가 편의에도 불구하고 편의성에도 불구하고 표준 파이썬 라이브러리에서 신중하게 유지되었습니다. 표면에만.

Re 6, 나는 그것이 Easy_install을위한 Ubuntu 수정이라고 생각합니다. 그것이 옳다면 표준 또는 다른 Ubuntu 관리자가 집단 결정을 내리는 곳마다 정의됩니다.

Re 7, 죄송합니다. 전혀 모른다 - 나는 합리적으로 최근에 우분투를 확인할 것이 없다.

다른 팁

나는 Mike Orr의 대답을 믿는다 가상 엔브 메일 링리스트 최고 인 것 같습니다. OP는이 질문을 두 곳 모두에 게시했습니다.

메일의 원본 콘텐츠 :

몇 년 전 Debian은/usr/local/lib/pythonversion/site-packages를 작성하고 기본 검색 경로에 포함하도록 Python 바이너리를 컴파일했습니다. 우분투는 평소와 같이 데비안의 리드를 따랐다. Python 개발자는 동일한 사이트 패키지 디렉토리를 사용하여 로컬로 설치된/USR/Local/Bin/Python과의 간섭을 받기 때문에이를 좋아하지 않았습니다. Ubuntu는 마침내 사이트 패키지를 포기하고 대신 원실 패키지를 사용하기로 결정했습니다. Loing 스토리는 Google, Python Bug Tracker 또는 Distutils Sig의 어딘가에있는 어딘가에 있습니다.

이 시스템은 적어도 Ubuntu Virtualenv 패키지를 사용하는 경우 작동합니다. Magic Sys.Path 항목이 추가되지 않았기 때문에 일부 사람들은 Ubuntu에서 로컬로 설치된 VirtualEnV를 사용하는 데 문제가있었습니다. 나는 그 옵션을 사용하지 않기 때문에-아니오 사이트 패키지에 대해 잘 모르겠습니다. 우분투 패키지에서 PIL과 mySQLDB를 실행합니다. 때로는 C 의존성을 컴파일하기가 어려울 수 있기 때문입니다. (올바른 헤더 파일이 필요하고 Python은 헤더 파일을 무시합니다.)

따라서 Ubuntu Python 패키지는/usr/lib/pythonversion/dist-packages로 들어갑니다. 또는 어떤 이유로 Python-Support 디렉토리. 로컬로 설치된 Python 패키지는 기본적으로/usr/local/lib/pythonversion/dist-packages로 이동합니다. Ubuntu 9.04 시스템을 설치할 때마다 다음을 실행합니다.

$ sudo apt-get 설치 Python-setuptools (6.0c9) $ sudo apt-get 설치 Python-virtualenv (1.3.3) $ sudo easy_install pip $ sudo pip 설치 Virtualenvwrapper

virtualEnvs는 이런 식으로 잘 작동하지만-제한-패키지를 시도하지는 않았습니다.

나는 virtualenv를 돌리려고 노력하고 있습니다. Easy_Install과 함께 VirtualEnV 1.3.3을 설치했습니다 (SetUptools 0.6C9로 업그레이드했습니다).

이 버전은 모두 Ubuntu 9.04에 있으므로 로컬로 설치하여 직접 더 어려워집니다.

그리고 모든 것이 /usr/local/lib/python2.6/dist-packages에 설치된 것 같습니다

APT-Get을 사용하여 패키지를 설치할 때/usr/lib/python2.6/dist-packages/에 배치된다고 가정합니다.

  1. 먼저 길에서 첫 번째로 제공됩니까? /usr/local/lib/python2.6/dist- 패키지/및 오래된 것 (Ubuntu repos/apt-get)에/usr/lib/python2.6/dist에 설치된 최신 버전의 패키지 xyz가있는 경우 -Packages, xyz를 가져올 때 어느 쪽을 가져 오나요? 이것이 경로 목록을 기반으로한다고 가정합니다.

sys.path가 순서대로 스캔됩니다. 유일한 재미있는 것은 .pth 계란이 일부 사람들이 기대하는 것보다 길에 또는 나중에 놓이는 것입니다. 그러나 할 수있는 모든 일에 PIP를 사용하는 경우 (즉, PIP 자체를 설치하는 것을 제외하고는 계란을 제외하고는 계란 링크가 아닌 사본 인 로컬 디렉토리의 스냅 샷을 제외하고는. .

  1. 도대체 왜 그렇게 혼란스러워? 내가 여기서 놓친 것이 있습니까?

잘 문서화되어 있지 않습니다. 나는 웹을 스캔하여 그것을 알아 냈습니다.

  1. 이것이 PIP에도 영향을 미칠까요?

예, PIP는 자동으로/usr/local/lib/pythonversion/site-packages에 설치됩니다. "pip install -e $ virtual_env packagename"을 사용하여 Virtualenv에 설치하십시오.

시스템 관리 도구를 구축하거나 새로운 시스템 서비스로 간주 될 수있는 것을 구축하지 않는 한 Ubuntu의 파이썬 설치를 만지면 안됩니다.

Ubuntu를 사용하여 Python 애플리케이션을 개발하거나 배포하는 경우 항상 소스에서 자신의 Python을 구축하고 TAR UP으로, 배포에 사용하십시오. 이렇게하면 모든 디렉토리가 올바른 장소에있게되며 VirtualEnV는 정상적으로 작동합니다. 서버에 여러 개의 Python 앱을 배포하려면 Python을 어떤 곳에서나 라이브로 만들 수 있습니다. /home/python 또는 /opt/python 또는 홈 디렉토리 외부의 어딘가에. 개발자 그룹에 대한 쓰기 권한이 있는지 확인하십시오 (users사람들이 패키지를 쉽게 추가 할 수 있도록.

이것은 또한 두 개의 패키지를 가질 수 있습니다. 사내 표준 도구 인 Python 배포판에 설치할 수 있으며 배포하는 Tarball의 일부가 될 수 있으며 앱 특정 패키지 만 VirtualEnV에 있습니다.

Ubuntu 시스템 설치된 Python을 업그레이드하거나 수정하지 마십시오.

글쎄, 나는 Ubuntu 9.04를 가지고 있으며 사이트 패키지와 하나가없는 샌드 박스 몇 개를 신속하게 설정하려고 시도했습니다. 그리고 상황이 잘 작동합니다.

내가 취한 접근 방식의 유일한 차이점은 Ubuntu의 Python-virtualenv 패키지 (1.3.3)를 사용한 것입니다. 우분투 팀이 우분투 설정에 맞게 조정했다고 가정합니다.

요약 easy_installed virtualenv를 잠시 동안 비활성화하려면 포장 된 Python-virtualenv를 사용하십시오 그리고 그것이 당신의 기대를 충족하는지보십시오.

실제로 우리는 아무런 문제없이 제작을 위해 유사한 설정을 사용합니다. 휴식은 이미 Alex에 의해 대답되었습니다.

그것을 고치는 또 다른 방법 :
https://stackoverflow.com/a/17265840/202168

필요한 각 virtualenv에서 해킹이나 특별한 버전의 virtualenv에 의존하지 않는 것을 기억해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top