Файл в текущей папке не найден при установке с помощью pip - PullRequest
0 голосов
/ 06 февраля 2020

Python модуль с точкой входа (такой же, как здесь ). Файл __main__ импортирует другой файл:

from myfile import MyClass

myfile.py - это файл в той же папке, mymodule. Он содержит класс под названием MyClass. Это работает под обычным Python, если я запускаю python3 __main__.py.

Теперь я установил mymodule как модуль с sudo pip3 install . на MacOS X (EDIT: та же ошибка на Linux) , Когда я запускаю mymodule из командной строки, я получаю ModuleNotFoundError для моего файла:

Traceback (most recent call last):
File "/Users/valekseyev/.pyenv/versions/3.7.3/bin/mymodule", line 11, in <module>
load_entry_point('mymodule==0.50', 'gui_scripts', 'mymodule')()
File "/Users/valekseyev/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/Users/valekseyev/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2793, in load_entry_point
return ep.load()
File "/Users/valekseyev/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2411, in load
return self.resolve()
File "/Users/valekseyev/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2417, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/Users/valekseyev/.pyenv/versions/3.7.3/lib/python3.7/site-packages/mymodule/__main__.py", line 5, in <module>
from myfile import MyClass
ModuleNotFoundError: No module named 'myfile'

Файл myfile.py присутствует вместе с __main__.py в /Users/valekseyev/.pyenv/versions/3.7.3/lib/python3.7/site-packages/mymodule/, я проверил. В папке тоже есть __init__.py, она пустая. Папка указана в packages в setup.py.

Что происходит, пожалуйста?

РЕДАКТИРОВАТЬ: глядя на Python модули там, они импортируют другие файлы из той же папки с следующий синтаксис:

from .myfile import MyClass

Если я попробую это сделать, обычный Python выполнит перерыв:

ImportError: попытка относительного импорта без известного родительского пакета

Может, как-нибудь обойтись?

1 Ответ

0 голосов
/ 06 февраля 2020

Нашел один способ. Я добавил имена файлов к. в строках импорта создал файл на один уровень выше (на том же уровне, что и setup.py), который будет обрабатывать папку mymodule как пакет:

from mymodule.__main__ import main
main()

, и я могу это запустить. Есть еще одна проблема, с которой я сталкиваюсь (библиотечные модули имеют приоритет над исправленными версиями), но не эта:)

...