Apt-get kullanarak paketi virtualenv'e yükleyin


16

Bu cevaba göre , apt-getpaketleri sistem genelinde kurar (standarttan) ve yalnızca pippaketleri bir sanal ortama (Pypi'den) kurabilir.

Ancak, ben sadece üzerinden erişilebilir apt-get, yani Pypi tarafından barındırılan bir virtualenv içine bir paket yüklemeniz gerekir .

Bunu nasıl yaparım?


Güzel soru Pal.
rɑːdʒɑ

Yanıtlar:


8

Başka bir alternatif, dosyayı indirip apt-get download, ayıklamak dpkg -xve ayıklanan dosyaları virtualenv'inize taşımaktır:

Misal:

apt-get download python-xyz

bu sonuçların:

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

Ardından, .deb dosyasının veri bölümünü ayıklamak için dpkg kullanın:

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

Yeni oluşturulan ./xyz-tmpdizinde artık /kullanmış olduğunuz (root) 'a yüklenmiş tüm dosyalara sahipsiniz apt-get install.

Varsayalım:

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

Hala alt dizinleri eşlemeniz gerekir (örn. dist-packagesVs. site-packages) ve daha sonra dosyaları virtualenv'inize taşıyabilirsiniz (bir virtualenv olduğu varsayılır /home/user/.virtualenvs/py27):

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

Önceki yanıtımla karşılaştırıldığında, bu yaklaşımın hangi dosyaların yüklendiğini araştırmanıza gerek kalmaması avantajı var, çünkü bunları çıkarma dizininde görebilirsiniz. Yine de, çıkarılan arşiv ile virtualenv arasındaki dizinlerin eşlenmesini gerektirir.


+1, işte bu yaklaşımın yalnızca APT aracılığıyla sanal bir ağa erişilebilen paketleri yüklemek için oldukça iyi çalışan başka bir örneği - Python 3.7'yi kullanarak son zamanlarda benzer bir şey yaptı.
RichVel

0

Virtualenv için gereken tek şey, virtualenvinizin alt ağacında paket dosyalarının bulunmasıdır. Apt-get ile Python sistemine hangi dosyaların kurulduğunu belirleyebildiğiniz sürece, bunları sanal ağınıza kopyalayabilirsiniz. Bu, site paketleri dizinindeki ve Python alt ağacınızdaki (ör. Komut dosyaları) diğer yerlerdeki dosyaları içerir.

Varsayımsal örnek:

sudo apt-get python-xyz

Python 2.7 sisteminize "xyz" adlı bir paket yüklediğini varsayalım:

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

"Xyz" paketiyle ilgili dosyaları virtualenv'inize kopyalayın (bir virtualenv olduğu varsayılarak /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

Zorluk, (1) hangi dosyaların belirli bir pakete ait olduğunu belirlemede ve (2) sistem Python ile virtualenv arasındaki karşılık gelen alt dizinleri eşlemede (örn . Yukarıdaki örnekte dist-packagesvs. site-packages).

Herkes bu konuda daha fazla deneyime sahipse, lütfen yorum yapın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.