Мой очень простой пример проекта содержит:
addtest/
setup.py
addtest/
__init__.py
__main__.py
app.py
Мой app.py
просто:
def main():
raise SystemExit("Command line entry point called.")
Мой __main__.py
просто:
from addtest.app import main
main()
My setup.py
содержит:
from setuptools import setup, find_packages
setup(
name='AddTest',
version='1.0',
packages=find_packages(),
entry_points={
'console_scripts': ['addtest = addtest.app:main']
},
)
Я ожидаю, что выполнение python setup.py test
ничего не даст, так как не написано ни одного модульного теста.Однако, запуск его в чистом virtualenv (Python 3.6.6 в Ubuntu 18.04.1) дает мне:
$ python setup.py test
running test
running egg_info
writing AddTest.egg-info/PKG-INFO
writing dependency_links to AddTest.egg-info/dependency_links.txt
writing entry points to AddTest.egg-info/entry_points.txt
writing top-level names to AddTest.egg-info/top_level.txt
reading manifest file 'AddTest.egg-info/SOURCES.txt'
writing manifest file 'AddTest.egg-info/SOURCES.txt'
running build_ext
Command line entry point called.
Обратите внимание на Command line entry point called.
, что означает, что он вызывает консольный скрипт, сгенерированный из моего __main__.py
(или, может быть, просто вызываете python -m addtest
).
Почему setup.py
вызывает консольный скрипт, когда я хочу, чтобы он запускал тесты?Дальнейшая проверка выполнения сценария показывает, что sys.argv
равно ['setup.py','test']
- почему?