какой путь будет добавлен в sys.path при запуске python3 src / b.py? - PullRequest
0 голосов
/ 26 июня 2019

Какие пути добавляются к sys.path при запуске команды, каковы факторы, влияющие на нее?

Моя версия Python - 3.6.4, и я также пробовал ее в версии 3.7.

Структура каталогов:

.
├── __init__.py
└── src
    ├── a.py
    └── b.py

Код:

# a.py
class A: pass

# b.py
from sys
print(sys.path)

from src.a import A
a = A()
print(a)

Я пытался запустить python3 src/b.py на двух машинах с одинаковой версией Python.Один из них не сообщил об ошибке, и произошла другая ошибка.

В правильном результате выполнения в sys.path есть два каталога, один - текущий каталог, а другой - каталог src;Правильный вывод:

['/home/work/test/testimport/src', '/home/work/test/testimport',...]
<src.a.A object at 0x7f8b71535ac8>

Неправильный результат:

['/home/work/test/testimport/src', ...]
Traceback (most recent call last):
  File "src/b.py", line 3, in <module>
    from src.a import A
ModuleNotFoundError: No module named 'src'

sys.path содержит только каталог src.

Какой путь будет добавленв sys.path, когда я запускаю python3 src / b.py?

1 Ответ

0 голосов
/ 26 июня 2019

src действительно не является модулем (не содержит __init__.py), и не имеет значения, находится он на вашем пути или нет. Кроме того, b.py "видит" каталог, в котором он находится (src), так что

from a import A

будет работать независимо от того, где вы выполняете B из (python3 /path/to/src/b.py) должно работать. Обратите внимание, даже если вы создали

`src/__init__.py`

ваш b.py потерпит неудачу, если вы не добавите каталог src в свой путь (или PYTHONPATH , который является рекомендуемым способом добавления модулей Python в ваш путь).

...