У меня есть каталог с такой структурой:
main/
find.py
project/
hello.py
module_a.py
hello.py
имеет следующее:
import module_a
print('hello')
Я пытаюсь использовать стандартную библиотеку ModuleFinder
чтобы обнаружить module_a
импорт.Я могу сделать это в интерпретаторе (начиная с main
):
$ python3
Python 3.7.1 (default, Nov 17 2018, 18:28:26)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> from modulefinder import ModuleFinder
>>> os.chdir('project')
>>> f = ModuleFinder()
>>> f.load_file('hello.py')
>>> print(f.modules)
{'hello': Module('hello', 'hello.py'), 'module_a': Module('module_a', 'module_a/__init__.py', ['module_a'])}
My find.py
делает то же самое:
import os
from modulefinder import ModuleFinder
os.chdir('project')
f = ModuleFinder()
f.load_file('hello.py')
print(f.modules)
Однако, когда язапустить его, используя python3 find.py
из каталога main
, он не обнаружит module_a
:
$ python3 find.py
{'hello': Module('hello', 'hello.py')}
Я могу получить скрипт find.py
для обнаружения модуля, когда я помещаю его втот же каталог, что и hello.py
, но это мне не полезно.Я ожидаю, что os.chdir('project')
приведет к тому, что скрипт будет вести себя так же, как если бы я поместил его в тот же каталог, но должно быть какое-то другое различие, о котором я не знаю.