#python #module #pip #virtualenv
#python #модуль #pip #virtualenv
Вопрос:
У меня есть вопрос, на который, как я полагаю, есть простой ответ, но по какой-то причине я изо всех сил пытаюсь найти его самостоятельно. Я создал и активировал виртуальную среду с помощью virtualenv, и я пытаюсь установить все необходимые пакеты для создания requirements.txt файл.
У меня есть, например, файл Python, который начинается так:
import xml.etree.ElementTree as ET
from lib.project import Projector
from lib import writer
import os
import datetime
from datetime import timedelta
from datetime import datetime
import pprint
Когда я пытаюсь запустить этот файл с виртуальной машины, я получаю следующую ошибку:
Traceback (most recent call last):
File "readMap.py", line 2, in <module>
from lib.project import Projector
ModuleNotFoundError: No module named 'lib.project'
Моя проблема в том, что я не уверен, почему виртуальная среда не может найти project.py . Моя структура каталогов:
regiaoSul
lib
__init__.py
arrival_conversion.py
coord_conversion.py
message_conversion.py
project.py
route_conversion.py
stop_conversion.py
wkt_parser.py
writer.py
readMap.py
json_generator.py
Комментарии:
1. Дает ли выполнение команды какое-либо дополнительное представление о том, какие пакеты установлены в вашей виртуальной среде?
pip list --local
Я предполагаю, что вы находитесь в своей виртуальной среде?2. Спасибо за ответ. Да, я нахожусь в своей виртуальной среде. Я отредактировал исходный пост.
3. Вы уверены, что в
project
пакете есть вызываемый модуль?lib
Ошибка предполагает, что нет. Вы проверили документы?4. В моем локальном
project
каталоге есть модуль, который называется………..lib
Я думаю, что я случайно установил неправильныйlib
пакет. Когда я пытаюсь установить свой локальныйlib
каталог, используя его путь, я получаю сообщение об ошибке, потому что он не содержитsetup.py
илиpyproject.toml
. Я думаю, что моя проблема может заключаться в том, что мойlib
каталог не содержит__init__.py
5. Это может помочь показать структуру каталогов.
Ответ №1:
Импорт в строке 2 подразумевает, что lib является модулем, а не «простым репозиторием». Я попробую запустить скрипт с флагом -m. Что-то вроде этого —
python -m script_name
не забудьте удалить расширение .py при запуске с флагом -m.
Еще один совет: вам не нужно устанавливать файлы python в виртуальную среду, это не какие-то внешние библиотеки. Они должны присутствовать (в том же порядке упаковки) только при запуске вашего скрипта.
Ответ №2:
Спасибо всем, кто откликнулся. Я считаю, что проблема заключалась в какой-то проблеме с зависимостями. В readMap.py
я импортировал writer
из lib
, а в writer.py
я импортировал Projector
из project
. Я переместил функцию, которая требовала, Projector
из writer.py
в readMap.py
, и это сработало.
Я все еще не до конца понимаю, почему это было проблемой. До недавнего времени я запускал свои скрипты в PyCharm, и все они работали со структурой, которая у меня была. Они не сработали, только когда я попытался запустить их из командной строки на своей виртуальной машине.
Если кто-нибудь хотел бы объяснить мне разницу и в чем именно заключалась проблема с моим импортом, не стесняйтесь.
Ответ №3:
Иногда я сталкиваюсь с такой же проблемой. Решение состоит в том, чтобы добавить путь к sys.path с помощью: import sys sys.path.insert(0, «/ path/to/your/package_or_module»)
Комментарии:
1. На мой взгляд, изменение
sys.path
должно быть решением последней инстанции (модификацииPYTHONPATH
также следует избегать).