У меня есть структура папок, подобная этой
working folder
├── my_package
│ ├── __init__.py
│ ├── modules.py
├── scripts
│ ├── abc
│ └── def
└── setup.py
и попытался написать
scripts=[
'scripts/abc',
'scripts/def'
]
в setup.py
, но мой коллега, использующий Windows, жаловался, что это было нелегко вызвать. Поскольку я хочу сделать свой пакет кроссплатформенным, я попытался следовать инструкциям console_scripts
точки входа , но мне, похоже, потребовалось поместить abc.py
и def.py
внутри my_package
. Тем не менее, я хочу сохранить структуру папок. Поэтому я попытался написать
entry_points={
'console_scripts': [
'abc=scripts.abc:main',
'def=scripts.def:main'
]}
in setup.py
и abc
могут быть вызваны, если этот пакет установлен с использованием pip install -e .
(где .
указывает на working folder
), но я не могу вызвать его, если установлен с pip install .
. Это сообщило бы о некоторой ошибке:
Traceback (most recent call last):
File "/Users/xx/.pyenv/versions/3.6.0/bin/abc", line 11, in <module>
load_entry_point('my_package==1.0.6', 'console_scripts', 'abc')()
File "/Users/xx/.pyenv/versions/3.6.0/lib/python3.6/site-packages/pkg_resources/__init__.py", line 565, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/Users/xx/.pyenv/versions/3.6.0/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2631, in load_entry_point
return ep.load()
File "/Users/xx/.pyenv/versions/3.6.0/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2291, in load
return self.resolve()
File "/Users/xx/.pyenv/versions/3.6.0/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2297, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
ModuleNotFoundError: No module named 'scripts'
Понятия не имею, что вызвало эту проблему. Я правильно использую console_scripts
? В чем разница между pip install .
и pip install -e .
? Я набрал python -m site
, и их пути одинаковы. Кстати, я использую Python 3.6.0, установленный локально через pyenv на macOS 10.12 +.