ทำให้ virtualenv สืบทอดแพคเกจเฉพาะจากแพคเกจไซต์ส่วนกลางของคุณ


208

ฉันกำลังมองหาวิธีที่จะทำให้ virtualenv ซึ่งจะมีเพียงบางห้องสมุด (ซึ่งฉันเลือก) ของการติดตั้งหลามฐาน

เพื่อเป็นรูปธรรมมากขึ้นฉันพยายามที่จะนำเข้า matplotlib ของฉันไปที่ virtualenv ในระหว่างการสร้าง virtualenv ไม่สามารถติดตั้งอย่างมีประสิทธิภาพด้วย pip หรือ easy_install เนื่องจากไม่มี libs คอมไพเลอร์บางตัว วิธีที่ฉันทำจนถึงตอนนี้คือการคัดลอกด้วยตนเอง

/usr/lib/python2.7/dist-packages/ to virtualenv_name/lib/python2.7/dist-packages/

อย่างไรก็ตามสิ่งนี้จะช่วยป้องกันไม่ให้ลิงก์ที่นำเข้ามาเพื่อจัดการกับไข่แดง (ซึ่งพิมพ์ libs ที่มีอยู่ในปัจจุบันเป็น virtualenv ทั้งหมด)

ดังนั้นมีวิธีทำตัวแปรที่เลือกของ

virtualenv --system-site-packages

16
คำเตือนที่อ่อนโยน - โปรดเลือกคำตอบหากข้อใดข้อหนึ่งด้านล่างนี้ใช้งานได้
foobarbecue

1
ดูเหมือนว่า 12 คนได้ทำการทดสอบให้คุณในช่วงสองสามเดือนที่ผ่านมา ...
2014

2
ทำไมตบตา OP? เราทุกคนสามารถเห็นว่าคำตอบยอดนิยมคืออะไร ไม่สำคัญว่าเขาจะยอมรับมันหรือไม่? ฉันคิดว่าความซื่อสัตย์ของเขาในการทดสอบสำหรับตัวเองแทนที่จะเป็นเพียงการตอบคำถามที่ได้รับความนิยมมากที่สุดควรได้รับการชื่นชม
Michael Scheper

5
2013: คะแนนคำตอบระหว่างคำตอบที่ถูกต้องและไม่ถูกต้องจะค่อนข้างคล้ายกัน OP บอกว่าเขาจะทดสอบ 2559: Michael Scheper รู้สึกประทับใจมากที่ OP (สามปีก่อน) กล่าวว่าจะทำการทดสอบ 2017: ฉันเจอคำถามนี้อีกครั้งและขบขัน
foobarbecue

2
ไม่มีคำตอบที่ถูกต้อง OP --system-site-packagesขอเลือก รู้รอบแนะนำให้ใช้แบบไม่เลือก--system-site-packagesและจากนั้นติดตั้งแพคเกจบางอย่างในพื้นที่สิ่งที่แตกต่างและมีความหมายที่แตกต่างกัน
Piotr Jurkiewicz

คำตอบ:


238

virtualenv --system-site-packagesสร้างสภาพแวดล้อมที่มี จากนั้นเปิดใช้งาน virtualenv และเมื่อคุณต้องการสิ่งที่ติดตั้งใน virtualenv มากกว่าหลามระบบการใช้งานหรือpip install --ignore-installed pip install -Iด้วยวิธีนี้ pip จะติดตั้งสิ่งที่คุณร้องขอในเครื่องแม้ว่าจะมีรุ่นทั้งระบบอยู่ก็ตาม python interpreter ของคุณจะดูเป็นอันดับแรกในไดเรกทอรีแพ็คเกจของ virtualenv ดังนั้นแพ็คเกจเหล่านั้นควรทำเงาส่วนกลาง


45
โดยใช้ -I คุณจะติดตั้งแพ็กเกจใหม่อยู่เสมอแม้ว่าจะมีอยู่ในไดเรกทอรีแพ็คเกจไซต์ทั่วทั้งระบบแล้วก็ตาม หากคุณใช้ -U แทนมันจะติดตั้งแพ็คเกจรุ่นใหม่ลงใน virtualenv ของคุณ แต่จะไม่ติดตั้งแพ็คเกจใด ๆ ที่มีอยู่ในระบบด้วยรุ่นที่ต้องการ
Danilo Bargen

15
คุณรู้หรือไม่ว่ามีวิธีใดในการ 'เปิดใช้งาน' ตัวเลือก --system-site-packages บนสภาพแวดล้อมเสมือนที่สร้างขึ้นก่อนหน้านี้? ฉันชอบที่จะหลีกเลี่ยงความยุ่งยากในการติดตั้งแพ็คเกจท้องถิ่นของฉันทั้งหมด!
Gabriel


ฉันพบคำตอบนี้น่าสนใจมาก แต่ฉันมีคดีแปลก ๆ ที่ไม่ได้ผล ฉันมี virtualenv ที่no-global-site-packagesเปิดใช้งาน แต่ด้วยเหตุผลบางอย่างฉันไม่รู้ว่ามีแพ็กเกจที่ถูกใช้งานจากระบบส่วนกลาง ใช้pip install -Iสำหรับแพคเกจจากภายใน virtualenv ไม่ทำงาน ในที่สุดฉันก็สิ้นสุดการถอนการติดตั้งแพคเกจชั่วคราวทั้งจาก virtualenv และระบบทั่วโลกจากนั้นฉันก็สามารถติดตั้งได้ใน virtualenv และในระบบ (ตามลำดับ) ดังนั้นตอนนี้มันใช้งานได้ดี
kstenger

3
-1 คำถามที่ถามเพื่อทำให้มองเห็นแพ็คเกจบางอย่างไม่ใช่ทั้งหมดยกเว้นแพ็คเกจที่อยู่ในเงามืด การยกเว้นชุดที่ จำกัด จะปลอดภัยกว่าทุกอย่างในรายการที่อนุญาตเนื่องจากช่วยให้รับประกันได้ว่าแพ็คเกจทั้งหมดจะต้องมีอยู่ใน venv ยกเว้นรายการที่ได้รับอนุญาตอย่างชัดเจน
bluenote10

19

คุณสามารถใช้--system-site-packagesแล้ว "ติดตั้ง" สิ่งที่เฉพาะเจาะจงสำหรับ virtualenv ของคุณ ด้วยวิธีนี้ทุกสิ่งที่คุณติดตั้งลงใน virtualenv ของคุณจะถูกนำมาจากที่นั่นมิฉะนั้นจะถูกนำมาจากระบบของคุณ


ฉันไม่แน่ใจว่าสิ่งที่ไม่ชัดเจน แต่จะลอง: ถ้าคุณสร้างตัวเลือก virtualenv - ตัวเลือกระบบไซต์แพคเกจระบบจะพยายามค้นหาแพคเกจใน virtualenv ของคุณก่อนหากไม่พบมันจะมี ลองค้นหาในการติดตั้งระบบของคุณ หากไม่พบที่นั่นก็จะเพิ่มและ ImportError
schacki

4
ปัญหาเดียวของวิธีนี้คือตอนนี้คุณมีไลบรารีระบบทั้งหมดแล้ว คุณอาจต้องการควบคุมสิ่งที่ติดตั้งไว้อย่างแน่นหนา
Dwayne

7
สิ่งที่ไม่ชัดเจนคือมันเป็นไปได้จริง ๆ ! หากคุณติดตั้ง pip ใน myprog ใน virtualenv ที่สร้างขึ้นด้วย --system-site-packages ซึ่ง myprog มีอยู่ในระบบมันจะไม่ "ติดตั้ง" myprog มากเกินไป จะพบว่า myprog มีอยู่และพูดว่า "ความต้องการได้รับการตอบสนองแล้ว" ดังนั้น ... คุณหมายถึงอะไร
foobarbecue


-7

virtualenv --clearคุณสามารถใช้ ซึ่งจะไม่ติดตั้งแพ็คเกจใด ๆ จากนั้นติดตั้งแพคเกจที่คุณต้องการ


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