Как заставить импорт работать в консольном скрипте при установке setuptools в Python? - PullRequest
0 голосов
/ 24 апреля 2020

Обычно я создаю скрипты консолей в Python, но не использует инструменты установки. Сейчас я пытаюсь использовать setuptools, чтобы автоматически управлять локальной установкой и подготовить ее к распространению. Я наткнулся на проблему, которая может быть немного обычной, но не смог найти ничего в Google. Обычно запускается консольный скрипт с python3 my_script.py, и есть оператор imports, который обычно загружается. Но при установке с помощью setuptools я получил следующую ошибку:

ModuleNotFoundError: No module named 'My_Object'

... если я попытаюсь локально импортировать модуль с именем My_Object.

Если программа установки не установит также модуль зависимостей, чтобы скрипт работал? Или чего-то не хватает в файле установки?

Вот мой setup.py файл в проекте root:

from setuptools import setup

VERSION = '0.0.1'

def readme():
    with open('README.md') as f:
        return f.read()

setup(
    name='object-test',
    version=VERSION,
    description="Test setup script",
    long_description_content_type="text/markdown",
    long_description=readme(),
    keywords="Testing import in installation",
    author="Danilo Silva",
    author_email="contact@danilocgsilva.me",
    packages=["src"],
    entry_points={"console_scripts": ["importtest=src.entry:main"],},
    include_package_data=True
)

Ниже, содержимое файла entry.py внутри моя локальная src папка:

from My_Object import My_Object

def main():
    print("Hello! This is just an application test for importing")
    my_object = My_Object()
    print(my_object.main())

# main()

и My_Object.py файл, также внутри src папка:

class My_Object:

    def main(self):
        return 'Hello! And this is the imported output!'

Обычно я раскомментирую последний main() в entry.py просто чтобы убедиться, что все работает нормально, затем запустите скрипт, набрав в консоли python3 entry.py. Это гарантирует, что в моем скрипте все в порядке и не выдается ModuleNotFoundError.

Как заставить операторы импорта работать в консольном скрипте, установленном setuptools? Чего мне не хватает?

1 Ответ

1 голос
/ 24 апреля 2020

Из того, что я вижу, я считаю, что первая строка файла src/entry.py должна выглядеть следующим образом:

from src.My_Object import My_Object

Так как при настройке src является верхним уровнем пакет, содержащий модуль My_Object.

...