После упаковки module1 не может «импортировать module2» из того же проекта. - PullRequest
1 голос
/ 11 октября 2019

Мой проект имеет следующую структуру:

project/
  + setup.py
  + bobafett/
    + __init__.py
    + __main__.py
    + foo.py

С:

  • __init__.py: пустой файл
  • foo.py: содержит определениеиз bar:
def bar():
    print("foo.bar()")
  • __main__.py импорт и использование foo.bar:
import foo
foo.bar()

✓ Локально, все работает хорошо:

~/project $ python3 bobafett/__main__.py
foo.bar()

✗ Как только bobafett упакован, опубликован и установлен, foo больше не найден

~/project $ python3 setup.py bdist_wheel
~/project $ curl -T ... https://my-pypi.example.com/simple/bobafett/...
~/project $ cd /tmp
/tmp $ pip --index-url https://my-pypi.example.com/simple --user bobafett
/tmp $ python -m bobafett
...
  File "/home/ysc/.local/lib/python3.6/site-packages/bobafett/__main__.py", line 1, in <module>
    import foo
ModuleNotFoundError: No module named 'foo'

Как это? Что я могу написать вместо import foo, который работает локально и после развертывания? Нужно ли менять структуру моего проекта?


setup.py:

from setuptools import setup

setup(
    name='bobafett',
    version='1.0.0',
    author='YSC',
    author_email='ysc@example.com',
    packages=['bobafett'],
    url='https:///my-pypi.example.com/simple/bobafett/',
    description='Prints "foo.bar()".',
)

1 Ответ

1 голос
/ 11 октября 2019

Вы можете сделать следующее:

  1. изменить import foo на from . import foo. Будет исправлено выполнение python -m bobafett, но остановка python3 bobafett/__main__.py.
  2. выполняется локально так же, как при упаковке: python -m bobafett вместо python3 bobafett/__main__.py.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...