apt-get을 사용하여 virtualenv에 패키지 설치


16

이 답변 에 따르면 , apt-get시스템 전체 (정식)에서 pip패키지를 설치하고 패키지를 virtualenv (Pypi에서) 에만 설치할 수 있습니다.

그러나 apt-getPypi가 호스팅하지 않는을 통해서만 액세스 할 수있는 virtualenv에 패키지를 설치해야합니다 .

어떻게해야합니까?


좋은 질문 Pal.
rɑːdʒɑ

답변:


8

또 다른 대안으로 파일을 다운로드하는 것입니다 apt-get download, 그것을 추출 dpkg -x하고 VIRTUALENV 압축을 푼 파일을 이동 :

예:

apt-get download python-xyz

이 결과를 다음과 같이 가정하십시오.

./python-xyz_1.2.3-3ubuntu5_amd64.deb

그런 다음 dpkg를 사용하여 .deb 파일의 데이터 부분을 추출하십시오.

dpkg -x python-xyz_1.2.3-3ubuntu5_amd64.deb ./xyz-tmp

새로 작성된 ./xyz-tmp디렉토리에 이제 /(root) 에 설치했을 모든 파일 이 있습니다 apt-get install.

그들이 있다고 가정 :

./xyz-tmp/usr/lib/python2.7/dist-packages/xyz/
./xyz-tmp/usr/lib/python2.7/dist-packages/xyz-1.2.3.egg-info

여전히 하위 디렉토리 (예 : dist-packagesvs site-packages) 를 매핑해야 하며 파일을 virtualenv로 이동할 수 있습니다 (virtualenv 가정 /home/user/.virtualenvs/py27).

mv ./xyz-tmp/usr/lib/python2.7/dist-packages/* /home/user/.virtualenvs/py27/lib/python2.7/site-packages/

이전의 답변과 비교할 때이 접근 방식은 추출 디렉토리에서 파일을 볼 수 있기 때문에 어떤 파일이 설치되어 있는지 조사 할 필요가 없다는 이점이 있습니다. 추출 된 아카이브와 virtualenv 사이의 디렉토리 맵핑이 여전히 필요합니다.


+1, 이 접근법 의 또 다른 예 는 APT를 통해 virtualenv에만 액세스 할 수있는 패키지를 설치하는 데 매우 효과적입니다. 최근 Python 3.7을 사용하여 비슷한 작업을 수행했습니다.
RichVel

0

virtualenv에 필요한 것은 virtualenv의 서브 트리에 패키지 파일이 존재하는 것입니다. apt-get을 통해 시스템 Python에 어떤 파일이 설치되었는지 확인할 수있는 한 해당 파일을 virtualenv에 복사 할 수 있습니다. 여기에는 사이트 패키지 디렉토리 및 Python 하위 트리 내의 다른 위치 (예 : 스크립트)에있는 파일이 포함됩니다.

가상의 예 :

sudo apt-get python-xyz

"xyz"라는 패키지를 시스템 Python 2.7에 설치한다고 가정하면 다음을 얻을 수 있습니다.

/usr/lib/python2.7/dist-packages/xyz/
/usr/lib/python2.7/dist-packages/xyz-1.2.3.egg-info

"xyz"패키지와 관련된 파일을 virtualenv에 복사하십시오 (virtualenv 가정 /home/user/.virtualenvs/py27).

/home/user/.virtualenvs/py27/lib/python2.7/site-packages/xzy/
/home/user/.virtualenvs/py27/lib/python2.7/site-packages/xzy-1.2.3.egg-info

어려움은 (1) 어떤 파일이 특정 패키지에 속하는지를 결정하고 (2) 시스템 Python과 virtualenv 사이의 해당 서브 디렉토리를 맵핑하는 것입니다 (예 : 위의 예 dist-packages와 비교 site-packages).

누구든지 이것에 대해 더 많은 경험이 있다면 의견을 말하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.