показывает ошибку импорта в python, в то время как у меня есть пакеты в sys.path - PullRequest
1 голос
/ 03 мая 2020

У меня есть пакеты в sys.path, но это показывает ошибку импорта. но если я пытаюсь импортировать те же пакеты на верхнем уровне в структуре каталогов, это работает.

(flask) [ tests ] $ python3
Python 3.7.5 (default, Nov 20 2019, 09:21:52) 
[GCC 9.2.1 20191008] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/home/rohit/flask/lib/python3.7/site-packages', '/home/rohit/flask/src/flaskr', '/home/rohit/flask/src/mycode']
>>> import mycode
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'mycode'
>>> import flaskr
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'flaskr'
>>> exit()


(flask) [ tests ] $ cd ..
(flask) [ src ] $ python3
Python 3.7.5 (default, Nov 20 2019, 09:21:52) 
[GCC 9.2.1 20191008] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/home/rohit/flask/lib/python3.7/site-packages', '/home/rohit/flask/src/flaskr', '/home/rohit/flask/src/mycode']
>>> import mycode
>>> import flaskr
>>> 

1 Ответ

1 голос
/ 03 мая 2020

Как показал ваш тест: если вы хотите импортировать пакеты /home/rohit/flask/src/flaskr и /home/rohit/flask/src/mycode, вам нужно добавить /home/rohit/flask/src к вашему пути. Ваша вторая попытка работает, потому что вы находитесь в этой папке.

Вы можете дополнительно проверить его с помощью:

import sys
sys.path.append('/home/rohit/flask/src')
# with relative import for a test module in test subdirectory:
# sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

import mycode
import flaskr

Источник: https://docs.python.org/3.7/tutorial/modules.html#packages: When importing the package, Python searches through the directories on sys.path looking for the package subdirectory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...