2011-03-31 25 views
13

Docs Pythona na http://docs.python.org/library/sys.html że sys.path jest ...Rozwiązywanie problemów Python sys.path

przygotowanej ze zmienną środowiskową PYTHONPATH, plus domyślnej instalacji zależne.

Znalazłem element ścieżki w moim sys.path, który był przyczyną problemów i miał wiele problemów ze śledzeniem go. Wszystko, co mogłem znaleźć w Google, to ludzie wyjaśniający, jak dodawać elementy do zmiennej .

Moje pytanie brzmi: czy są jakieś narzędzia, które mogą pomóc wyśledzić , dlaczego konkretny przedmiot jest na twoim sys.path? Jak mogę dowiedzieć się więcej o "domyślnej instalacji"?

Do tej pory znalazłem częściową odpowiedź, aby użyć strace na samym pythonie i poszukać plików .pth. Znalazłem także sys.path_importer_cache, który może ale nie musi mieć zastosowania.

+0

Który przedmiot by to był? –

+0

Z jakiego systemu operacyjnego korzystasz? – cwallenpoole

+1

Ten przedmiot był tylko moim własnym pakietem, który użyłem "setup.py develop" jako root (wstyd mi). System operacyjny to Ubuntu Linux, ale Python jest językiem niezależnym od platformy, szukałem mniej listy plików/katalogów do sprawdzenia i więcej dokumentacji, ogólnych wytycznych, a nawet linków do kodu źródłowego CPython. –

Odpowiedz

5

Ostatnio miałem pewne problemy z sys.path i oto jak próbowałem ustalić, skąd pochodzą dane wpisy. Byłem w stanie śledzić wszystkie wpisy i skąd pochodzą. Mam nadzieję, że to ci pomoże.

  • Pierwsza dodana C:\WINNT\system32\python27.zip (więcej szczegółów w PEP273).

  • Następnymi dodanymi są wpisy z rejestru systemu Windows. Wpisy C:\Python27\DLLs;C:\Python27\lib; C:\Python27\lib\plat-win; C:\Python27\lib\lib-tk pochodzą z rejestru HOT_KEY_LOCAL_USER/Python/PythonCore/2.7/PythonPath. Więcej szczegółów w komentarzach do kodu źródłowego Python tutaj http://svn.python.org/projects/python/trunk/PC/getpathp.c (Te wpisy były najtrudniejsze do zrozumienia, dopóki nie znalazłem linku powyżej).

  • Następnie, jak wyjaśniono w dokumentacji site opakowaniu (link) sys.path jest zbudowany z sys.prefix i sys.exec_prefix. Na moim komputerze obaj wskazują na C:\Python27. Domyślnie przeszukuje wszystkie wpisy w lib/site-packages. Teraz wpisy C:\Python27; C:\Python27\lib\site-packages są dołączone do powyższej listy.

  • Następnie przeszukuje każdy z plików .pth w kolejności alfabetycznej. Mam easy_install.pth, pywin32.pth i w moich pakietach witryny. To tutaj zaczyna się dziwnie robić. Byłoby to proste, gdyby wpisy w plikach .pth były po prostu lokalizacjami katalogów. Zostaną one dołączone do linii sys.path po linii. Jednak kod easy_install.pth ma trochę kodu Pythona, który powoduje, że wpisy wymienione w easy_install.pth dodają listę pakietów na liście począwszy od z listy sys.path.

  • Po tej wpisów katalogowych w pywin32.pth, setuptools.pth są dodawane na końcu listy sys.path jak oczekiwano.

Uwaga: Chociaż powyższa dyskusja odnosi się do systemu Windows, jest podobny nawet na Mac itd. Na komputerze Mac po prostu dodaje różne domyślne OS jak darwin etc.zanim zacznie przeglądać katalog site-packages dla plików .pth.

W twoim przypadku możesz zacząć od uruchomienia powłoki Pythona i sprawdzenia, gdzie znajdują się sys.prefix i sys.exec_prefix, a następnie od tego momentu.

Uwaga 2: Jeśli korzystasz z IDE, takiego jak Aptana/PyDev, doda on więcej własnych konfiguracji. Więc musisz być ostrożny.

+0

kudos za linki. Nie mogłem znaleźć żadnego odpowiednika dla 'getpathp.c' dla Maca lub Linuxa. Czy jest jeden? –

+0

Dzięki. Komputer Mac nie ma rejestru ... więc nie jest tak prosty jak znalezienie właściwych lokalizacji za pomocą kluczy rejestru. Również lokalizacje dla komputerów Mac będą zależeć od opcji kompilacji używanych podczas instalowania. FWIW, to najlepszy link na temat Maca. http://svn.python.org/projects/python/trunk/Mac/README. Sprawdziłem na moim Macu, a Python 2.7 rzeczywiście zainstalował się w lokalizacjach wymienionych w tym pliku. –

Powiązane problemy