2013-03-04 12 views
22

Próbuję uczynić moduł wykrywalnym w systemie, w którym nie mam dostępu do zapisu do globalnego katalogu site-packages i bez zmiany środowiska (PYTHONPATH). Próbowałem umieścić plik .pth w tym samym katalogu, co wykonywany skrypt, ale wydaje się, że jest on ignorowany. Na przykład, stworzyłem plik extras.pth o następującej treści:Używanie plików .pth

N:\PythonExtras\lib\site-packages 

Ale poniższy skrypt, umieszczony i uruchomić w tym samym katalogu, druki False.

import sys 
print r"N:\PythonExtras\lib\site-packages" in sys.paths 

Jedyny katalog w sys.path do których mam dostęp do zapisu jest katalog zawierający skrypt. Czy istnieje inny (obecnie nieistniejący) katalog, w którym mogę umieścić extras.pth i czy jest widoczny? Czy istnieje lepszy sposób na rozwiązanie tego problemu?

Używam Pythona 2.7 w systemie Windows. Wszystkie pytania, które mogłem znaleźć tutaj, używają katalogów modułów systemowych.

Edit: Mam wytropił katalog instalacyjny systemu Windows dla każdego użytkownika, w %APPDATA%\Python\Python27\site-packages. Mogę tam umieścić moduł i zostanie zaimportowany, ale jeśli wstawię tam plik .pth, nie będzie to miało żadnego efektu. Czy to naprawdę nie powinno działać, czy robię coś złego?

Odpowiedz

37

Zgodnie z opisem w artykule the documentation pliki PTH są przetwarzane tylko wtedy, gdy znajdują się w katalogu pakietów witryn. (Dokładniej, są przetwarzane, jeśli znajdują się w "katalogu witryny", ale "katalog stron" sam w sobie jest globalnym ustawieniem dla instalacji Pythona i nie zależy od bieżącego katalogu ani katalogu, w którym znajduje się skrypt.)

Jeśli katalog zawierający Twój skrypt znajduje się na sys.path, możesz utworzyć w tym katalogu sitecustomize.py. Zostanie załadowany po uruchomieniu Pythona. Wewnątrz sitecustomize.py, można zrobić:

import site 
site.addsitedir('/some/dir/you/want/on/the/path') 

To nie tylko dodać, że katalog, ale doda to jako „katalogu witryn”, powodując tam PTH pliki mają być przetwarzane. Jest to przydatne, jeśli chcesz stworzyć własny, osobisty katalog w stylu site-packages.

Jeśli potrzebujesz tylko jednego lub dwóch katalogów do ścieżki, możesz to zrobić prostszy. Po prostu utwórz małą bibliotekę Pythona, która manipuluje sys.path, a następnie zaimportuj tę bibliotekę ze skryptu. Coś jak:

# makepath.py 
import sys 
sys.path.append('/whatever/dir/you/want') 

# script.py 
import makepath 

EDIT: Ponownie, według the documentation, istnieje możliwość katalogu site-specific w %APPDATA%\Python\PythonXY\site-packages (w systemie Windows). Możesz to wypróbować, jeśli faktycznie masz dostęp do zapisu (a nie tylko do katalogu skryptów).

+0

Problem polega na tym, że chodzi o uczenie klasy, a ja staram się, aby działała możliwie jak najbliżej. Ludzie zawsze zaczynają nowy pyton i wpadają w kłopoty. Czy w "Dokumentach i ustawieniach" nie ma niektórych folderów, które liczą się jako "katalogi stron"? Różni instalatorzy będą umieszczać tam różne rzeczy, ale nie wiem, gdzie i czy są sprawdzane pod kątem plików '.pth'. – alexis

+0

Tak, jest i jest to udokumentowane wraz ze wszystkim innym na http://docs.python.org/2/library/site.html#site.USER_SITE. Myślałem, że powiedziałeś, że masz dostęp do zapisu tylko do katalogu skryptów, ale widzę, że źle odczytałem. – BrenBarn

+0

Tak, dziękuję, wymyślam tę stronę.html' to miejsce do patrzenia. Jednak umieszczenie '.pth' nie wydaje się działać ... – alexis

Powiązane problemy