Virtualenv'in global site paketlerinizden belirli paketleri devralmasını sağlayın


208

Ben sadece bazı kütüphaneler (ki seçtiğim) temel python yükleme içerecek bir virtualenv yapmak için bir yol arıyorum.

Daha somut olmak için, matenlotlibimi virtualenv oluşturma sırasında virtualenv'e aktarmaya çalışıyorum. Bazı fortran derleyici kütüphanelerini kaçırdığı için pip veya easy_install ile verimli bir şekilde kurulamaz. Şimdiye kadar yaptığım yol el ile kopyalamaktı

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

ancak bu, içe aktarılan manlen bağlantıların yumurta sarısı tarafından kaydedilmesini önler (sanal olarak mevcut olan tüm kütüphaneleri yazdırır).

Yani, seçici bir varyant yapmanın bir yolu var mı

virtualenv --system-site-packages

16
nazik bir hatırlatma - aşağıdakilerden biri işe yarıyorsa lütfen bir cevap seçin.
foobarbecue

1
son birkaç ay içinde 12 kişi sizin için test etmiş gibi görünüyor ...
foobarbecue

2
Neden OP'yi kızdırıyor? Hangisinin en popüler cevap olduğunu görebiliriz; kabul edip etmediği gerçekten önemli mi? Bence, en popüler cevabı işaretlemek yerine, kendisi için testteki bütünlüğüne hayran olmak gerekiyor.
Michael Scheper

5
2013: Doğru ve yanlış cevaplar arasındaki cevap puanları oldukça benzerdir. OP test edeceğini söylüyor. 2016: Michael Scheper, OP'nin (üç yıl önce) test edeceğini söyledi. 2017: Bu soruya tekrar rastlarım ve eğlendim.
foobarbecue

2
Doğru cevap yok. OP seçmeli istedi --system-site-packages. Yanıtlar, seçici olmayan --system-site-packagesve daha sonra bazı paketleri yerel olarak, farklı olan ve farklı sonuçları olan fazladan yüklemeyi önerir .
Piotr Jurkiewicz

Yanıtlar:


238

İle ortam oluşturun virtualenv --system-site-packages. Ardından, virtualenv'i etkinleştirin ve sistem python'u yerine virtualenv'de bir şeyler kurmak istediğinizde, pip install --ignore-installedveya öğesini kullanın pip install -I. Bu şekilde pip, sistem çapında bir sürüm olsa bile yerel olarak istediğinizi kuracaktır. Python yorumcunuz ilk olarak virtualenv'in paket dizinine bakacaktır, böylece bu paketler global olanları gölgelemelidir.


45
-I kullanarak, sistem çapında site paketleri dizininde zaten mevcut olsalar bile paketleri her zaman yeniden yüklersiniz. Bunun yerine -U kullanırsanız, virtualenv'inize yeni paket sürümleri yükler, ancak sistemde zaten mevcut olan paketleri gerekli sürümle yeniden yüklemez.
Danilo Bargen

15
Önceden oluşturulmuş bir sanal ortamda --system-site-Packages seçeneğinin 'etkinleştirilmesinin' herhangi bir yolu olup olmadığını biliyor musunuz? Tüm yerel paketlerimi yeniden yükleme zahmetinden kaçınmak isterim!
Gabriel


Bu cevabı çok ilginç buldum, ancak işe yaramadığı çok garip bir durumum vardı. no-global-site-packagesEtkinleştirilmiş bir sanal ağım var . Ama nedense küresel sistemde kullanılan bir paket olduğunu bilmiyorum. Kullanılması pip install -Ivirtualenv içinden paket için çalışmadı. Sonunda paketi hem virtualenv hem de global sistemden geçici olarak kaldırarak bitirdim, Sonra sanal olarak ve sisteme (bu sırayla) geri yükleyebilirim. Şimdi iyi çalışıyor.
kstenger

3
-1 Soru, gölgeli paketler hariç hepsini değil, belirli paketleri görünür kılmayı ister. Sınırlı bir seti beyaz listeye eklemek, her şeyi beyaz listeye eklemekten çok daha güvenli olacaktır, çünkü açık bir şekilde beyaz listeye eklenenler hariç tüm paketlerin venv'de var olmasını garanti eder.
bluenote10

19

Sen-ebilmek kullanma --system-site-packagesve sonra "overinstall" için sanal şeyler sanal. Bu şekilde, virtualenv'inize yüklediğiniz her şey oradan alınır, aksi takdirde sisteminizden alınır.


Neyin net olmadığından tam olarak emin değilim, ama deneyeceğim: --system-site-options seçeneğiyle bir sanal ağ oluşturursanız, sistem öncelikle sanal ağınızda paketleri bulmaya çalışır, eğer onu bulamazsa, sistem python kurulumunda bulmaya çalışın. Sadece orada da bulamazsa, yükseltecek ve ImportError.
schacki

4
Bu yaklaşımla ilgili tek sorun, artık tüm sistem kitaplıklarına sahip olmanızdır. Nerede yüklü olduğu üzerinde çok sıkı kontrol isteyebilirsiniz.
Dwayne

7
Belirsiz olan bunun aslında nasıl mümkün olduğudur! Sistemimde sistemim var olan --system-site-Packages ile oluşturulan bir sanal ortamda pip install myprog yaparsanız, myprog "overinstall" olmaz. Sadece programımın var olduğunu ve "Gereksinim zaten karşılandı" diyecektir. Peki ... ne demek istediniz?
foobarbecue

-5

İle sanal env yükleyin

virtualenv --system-site-packages

ve kullan pip install -U to install matplotlib


3
Bu sorunun sorduğunun tam tersi.
Dan Getz

-7

Kullanabilirsiniz virtualenv --clear. hiçbir paket yüklemez, sonra istediğiniz paketleri yükleyin.


Bu, sistem çapında bazı paketlerin nasıl kullanılacağına dair asıl sorunun cevabı değildir
MrLeeh
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.