обучение python упаковка, старый ModuleNotFoundErrro - PullRequest
0 голосов
/ 25 апреля 2020

Что я здесь не так делаю ???

Моя структура: -

├── tst
│   ├── setup.py
│   └── tst
│       ├── __init__.py
│       ├── mre.py
│       └── start.py

содержимое файла start.py

from mre import mre


def proc1():
    mre.more()
    return ('ran proc1')


if __name__ == "__main__":
    print('test')
    print(proc1())

содержимое файла mre.py

class mre(object):

    def more():
        print('this is some more')

содержимое файла setup.py

from setuptools import setup

setup(name='tst',
      version='0.1',
      description='just a test',
      author='Mr Test',
      author_email='test@example.com',
      entry_points={'console_scripts': ['tst=tst.start:proc1']},
      license='MIT',
      packages=['tst'],
      zip_safe=False)

ничего в __init__.py

Когда я запускаю это из командной строки, все в порядке, работает как положено. Однако, когда я упаковываю это с помощью PIP и запускаю, используя tst, я получаю: -

Traceback (most recent call last):
  File "/home/simon/.local/bin/tst", line 5, in <module>
    from tst.start import proc1
  File "/home/simon/.local/lib/python3.8/site-packages/tst/start.py", line 1, in <module>
    from mre import mre
ModuleNotFoundError: No module named 'mre'

Я прочитал множество постов, и я просто не могу понять это, если я go в установите код и измените строку

from mre import mre

на

from tst.mre import mre

, тогда это сработает, но тогда это не сработает при запуске его из каталога в целях разработки ... I ' Я, очевидно, упускаю что-то очевидное :) Это проблема пути или я пропускаю команду в файле setup.py?

Если кто-то может указать мне правильное направление?

edit: я могу Нужно сделать что-то другое при разработке модуля, который будет упакован, возможно, назвать код по-другому?

cheers

1 Ответ

0 голосов
/ 25 апреля 2020

С моей точки зрения, абсолютный импорт from tst.mre import mre - это правильно. В конечном итоге вы можете использовать from .mre import mre, но абсолютный импорт безопаснее.

Для целей разработки:

Без установки часто можно запустить исполняемый модуль :

  • path/to/pythonX.Y -m tst.start.
...