Problem ze ścieżką wyszukiwania modułu Pythona
Próbuję pracować na środowisku dev, ale znajduję problemy w tym pytonie, który wydaje się używać modułów z katalogu site-packages. Chcę, żeby korzystał z modułów z mojego katalogu dev.
sys.path zwraca kilka katalogów, takich jak ten
['', '/usr/lib/python26.zip', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/site-packages' etc
To dobrze, używa pierwszego katalogu jako pierwszego miejsca wyszukiwania (przynajmniej tak to rozumiem).
Ok teraz, jeśli utworzę powiedz plik o nazwie command.py w bieżącym katalogu, wszystko działa tak, jakbym tego oczekiwał.
>>> import commands
>>> commands.__file__
'commands.pyc'
Wychodzę z powłoki Pythona i uruchamiam kolejną. Zrobię to.
>>> import foo.bar.commands
Teraz oczekuję, że zrobię to z bieżącego katalogu na ./foo/bar/ i stamtąd otrzymasz moduł komend. Ale dostaję to
>>> foo.bar.commands.__file__
'/usr/lib/python2.6/site-packages/foo/bar/commands.pyc'
Nawet jeśli z mojego obecnego katalogu jest ./foo/bar/commands.py
Używając imp.find_module () i imp.load_module () mogę poprawnie załadować moduł lokalny. Co tak naprawdę jest interesujące (chociaż nie wiem, co to znaczy) to ostatnia linia, która jest wydrukowana w tej sekwencji
>>> import foo.bar.commands
>>> foo.bar.commands.__file__
'/usr/lib/python2.6/site-packages/foo/bar/commands.pyc'
>>> foo.bar.__file__
'/usr/lib/python2.6/site-packages/foo/bar/__int__.pyc'
>>> foo.__file__
'./foo/__init__.pyc'
Jeśli więc znajdzie foo /w tym.pyc w lokalnym katalogu, dlaczego nie może znaleźć innych plików w lokalnym katalogu?
Twoje zdrowie