У меня есть проект со структурой:
src/
-__main__.py which calls cli.get_args()
-cli.py which takes cli args and starts program
-program.py that contains logic of the program
setup.py
start.py
setup.py содержит:
setup(
name="test",
version="0.0.1",
description="test",
author="me",
license="MIT",
long_description=long_description,
long_description_content_type="text/markdown",
#py_modules=[""],
#package_dir={"": "src"},
classifiers=[
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"License :: OSI Approved :: MIT License",
"Operating System :: POSIX :: Linux",
"Development Status :: 4 - Beta",
"Environment :: Console",
"Natural Language :: English",
"Topic :: Internet"
],
install_requires=[
"beautifulsoup4 >= 4.9.0",
"requests >= 2.23.0",
],
packages=find_packages(),
entry_points={
"console_scripts": ["test=src.cli:main"]
}
)
Я могу запустить программу из каталога root с помощью:
python3 src/cli.py --args
python3 src/ --args
pytrhon3 start.py --args
Теперь сам вопрос: как правильно упаковать этот проект, чтобы я мог установить его на другой компьютер и выполнить, как, например, flake8, где я могу установить flake8 в глобальную python установки, а затем вызвать
python3 -m flake8
Когда я собираю этот пакет, он не позволяет мне выполнить его как python3 -m test
, я получаю /usr/bin/python3: No module named test
, даже если он установлен глобально и может быть найден, когда я перечислите все пакеты pip3.
И еще один вопрос. Если я хотел бы предоставить еще один модуль запуска в каталоге root, который называется start.py
для людей, которые клонируют репозиторий и не хотят собирать пакет, будет ли полезен start.py? Это дубликат main .py в src /, но он не так запутан для выполнения.
EDIT: я переименовал start.py в название моего проекта и удалил entry_points из setup.py , Моя посылка теперь может быть вызвана глобально с python3 -m test
без проблем. Но это только дает мне больше путаницы, особенно после изучения исходного кода flake8, который делает всю установку совершенно другой.