2012-05-21 12 views
18

Bazı paketleri üçüncü tarafa site-packages dizinine (standart sistem konumlarının ötesinde) yüklemek istiyorum. Bunu, buradaki .pth dosyalarına saygı duyulacak şekilde ayarlamanın herhangi bir yolu var mı?İkincil bir site paketleri dizini oluşturma (ve burada .pth dosyalarından yükleme paketleri)


Arka plan: OS X, virtualenv ve homebrew kullanıyorum. Pipodan sanallaştırmaya güzelce yüklenmeyen birkaç paket (benim durumumda wxPython) var. Bu durumlarda, onların yerine çalışan homebrew paketleri vardır. Homebrew, /usr/local/lib/python2.7 numaralı telefondan üçüncü bir site paketleri klasörü oluşturur. Sadece bu klasöre işaret etmek ve brew'un kontrolü altındaki tüm parçaların bakımını bırakmak istiyorum. Ancak, bu mümkün değil gibi görünüyor.

Bu konuyla ilgilenen kesinlikle tek kişi değilim. Çok fazla karşılaştığım jenerik 'pth dosyaları çalışmıyor' soruları ve çevrimiçi olarak tökezlediğim mesajlar bu konuyla ilgili. İyi bir çözüm var mı?

cevap

17

site modülüne bir göz atın. İstediğiniz şeyi yapması gereken addsitedir işlevini sağlar.

sitecustomize.py veya usercustomize.py adlı bir dosya oluşturun ve aşağıdaki içeriği ile bir akım PYTHONPATH dizine (veya sys.path biter herhangi bir dizine) yerleştirmek olacaktır, bu kullanımı en kolay yolu:

import site 
site.addsitedir('/usr/local/lib/python2.7') 

Python başladığı zaman sitecustomize ve usercustomize ithal etmek için bir girişimde bulunulur, bu yüzden bu neden olur. Site belgelerden; bu yol yöneldirimlerden sonra

bir girişim keyfi siteye özel özelleştirmeleri gerçekleştirebilir sitecustomize adlı bir modüle, ithal etmek yapılır. Genellikle site paketleri dizinindeki bir sistem yöneticisi tarafından oluşturulur. Bu içe aktarma bir ImportError istisnasıyla başarısız olursa, sessizce yoksayılır.

Bundan sonra, ENABLE_USER_SITE doğruysa, kullanıcıya özgü isteğe bağlı özelleştirmeler gerçekleştirebilen usercustomize adlı bir modülün içe aktarılması için bir girişimde bulunulur. Bu dosya, -s tarafından devre dışı bırakılmadığı sürece sys.path'un bir parçası olan kullanıcı site paketleri dizininde (aşağıya bakın) oluşturulmak üzere tasarlanmıştır. Bir ImportError sessizce yoksayılacak.

+0

sitecustomize.py mı var içeride .pth dosyalar yerleştirebilir veya otomatik olarak başlangıçta çalıştırmak olsun usercustomize.py olabilir? Düzenleme: [evet, evet yaparlar] (http://docs.python.org/library/site.html). Teşekkürler! –

+0

@MattB. Evet, cevabımı bazı ek bilgilerle düzenledim. Dokümantasyon, cevabımda bağlantı kurduğum site modülü sayfasının üst kısmından geliyor. –

+1

Hala nasıl çalıştığını tam olarak anlayamıyorum, ama: (1) addsitedir ('/ usr/local'), yani alternatif önek (ama benim için çalışmaz), veya (2) addsitedir ('/ usr/local/lib/python2.7/site-packages') ekleme yolu, ve ikinci durumda, neden sadece PYTHONPATH'a eklemiyorsunuz? –

1

özellikle kullanıcı sistem çapındaki site-packages hiçbir yönetici erişimi olan durumla başa çıkmak için, kullanıcı başına site-packages dizinleri oluşturulmasını ele PEP 370 yoktu. Örneğin, Unix'te (Mac OS dahil) ve birinin Python 3'ü kullandığını varsayarsak.6, tek aşağıdaki dizini oluşturmak ve

~/.local/lib/python3.6/site-packages