Как я могу использовать setuptools для создания точки входа console_scripts, которая вызывает `python -m mypackage`?

Я пытаюсь быть хорошим Pythonista и следую PEP 338 для моего пакета, который планирую развертывать.

Я также пытаюсь сгенерировать свои исполняемые скрипты с помощью python setuptools install с помощью параметров setuptools entry_points{'console_scripts': ... }.

Как я могу использовать entry_points для генерации двоичного кода, который вызывает python -m mypackage (и передает * args, ** kwargs)?

Вот несколько попыток, которые я сделал без успеха:

setuptools(
...

(1)

entry_points=
       {'console_scripts': ['mypkg=mypkg.__main__'],},

(2)

entry_points=
       {'console_scripts': ['mypkg=mypkg.main'],},

(3)

entry_points=
       {'console_scripts': ['mypkg=python -m mypkg'],},

Первичные ресурсы, которые я использовал:

Ответ 1

Как я могу использовать entry_points для генерации двоичного кода, который вызывает python -m mypackage (и передает * args, ** kwargs)?

Я думаю, что это неправильный способ взглянуть на проблему. Вы не хотите, чтобы ваш script вызывал python -m mypackage, но вы хотите, чтобы script имел ту же точку входа, что и python -m mypackage

Рассмотрим этот простой пример:

script_proj/
├── script_proj
│   ├── __init__.py
│   └── __main__.py
└── setup.py

и минималистский setup.py:

from setuptools import setup

setup(
    name="script_proj",
    packages=["script_proj"],
    entry_points = {
        "console_scripts": [
            "myscript = script_proj.__main__:main",
        ]
    }
)

__main__.py является фиктивным модулем и содержит метод main.

def main():
    print("Hello world!")

if __name__ == "__main__":
    main()

После установки у вас есть исполняемый myscript, который вызывает метод main в __main__.py. В этом пакете дизайн python -m script_proj также вызывает тот же метод main.

Ответ 2

После успешной установки, когда я набираю myscript, терминал говорит, что команда не найдена. Можешь пожалуйста