ติดตั้งแพคเกจเป็น virtualenv โดยใช้ apt-get


16

ตามคำตอบนี้ , apt-getการติดตั้งแพคเกจทั้งระบบ (จากบัญญัติ) และมีเพียงpipสามารถติดตั้งแพคเกจเข้า virtualenv A (จาก Pypi)

อย่างไรก็ตามฉันจำเป็นต้องติดตั้งแพคเกจลงใน virtualenv ที่สามารถเข้าถึงได้ผ่านทางapt-getเช่นไม่ได้โฮสต์โดย Pypi

ฉันจะทำอย่างไร


คำถามที่ดี 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 ของคุณ ดังนั้นตราบใดที่คุณสามารถกำหนดไฟล์ที่ติดตั้งลงในระบบ Python ผ่าน apt-get คุณสามารถคัดลอกไฟล์เหล่านั้นไปยัง 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-packagesvs.site-packagesในตัวอย่างด้านบน)

หากใครมีประสบการณ์มากกว่านี้กรุณาแสดงความคิดเห็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.