как импортировать модули из локального репозитория с помощью virtualenv и pip

#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 также следует избегать).