не может импортировать локальный модуль внутри виртуальной среды из подпапки - PullRequest
0 голосов
/ 31 октября 2019

Я работаю в виртуальной среде, созданной с помощью pyenv virtualenv, и моя структура папок выглядит следующим образом

ProjectFolder (virtual env)
    Subfolder
        modulea.py
        __init__.py
    main.py

в main.py Я хочу вызвать функцию, определенную в modulea.py. Однако

from Subfolder.modulea import function 

выдает ошибку

нет модуля с именем Subfolder.modulea;Подпапка не является пакетом.

, когда я воспроизводю аналоговую структуру с некоторыми тестовыми файлами вне виртуальных сред, все работает хорошо. Кроме того, когда я перемещаю modulea.py в ProjectFolder, импорт работает хорошо.

1 Ответ

0 голосов
/ 31 октября 2019

Один из возможных обходных путей заключается в следующем. в каталоге ~/.pyenv/versions/your_virtual_environment/lib/your_python_version/site-packages добавьте файл с расширением .pth и укажите в нем все пути к подпапкам, содержащим модули, которые вы хотите импортировать.

home/usr/Projects/Projectfolder/Subfolder/

это добавляет каталог в путь Python. Затем вместо импорта через from Subfolder.modulea import function вы можете напрямую импортировать импорт через from modulea import function. В качестве альтернативы добавление подпапки в путь Python через sys.path.append должно перед выполнением импорта выполнить ту же работу.

Однако я все еще озадачен, почему обычный синтаксис "from ... import ...", кажется, не работает в виртуальной среде.

...