Chcę utworzyć aplikację Pythona o nazwie nóż, która może być wykonana z interfejsu CLI, problemem jest to, że nie można zaimportować modułów. Zastosowałem tę samą strukturę folderów, co projekt Django.Zainstalowany przez skrypt Python skrypt CLI nie pozwala na import tego samego modułu.
Moja struktura katalogów jest tak:
knife/
knife/
bin/
knife-cli.py
core/
main/
__init__.py
__init__.py
__init__.py
setup.py
My setup.py
wygląda następująco:
#!/usr/bin/env python
from setuptools import setup, find_packages
exclude = ['knife.bin']
setup(name='Knife',
version='0.3',
description='Very cool project',
author='John Doe',
author_email='[email protected]',
packages=find_packages(exclude=exclude),
include_package_data=True,
scripts=['knife/bin/knife-cli.py'],
entry_points={
'console_scripts': [
'knife-cli = knife.core.main:main'
]
},
zip_safe=False,
)
My knife/core/main/__init__.py
zawiera main()
funkcję i mój knife/bin/knife-cli.py
wygląda następująco:
#!/usr/bin/env python
from knife.core import main
if __name__ == "__main__":
main.main()
Po zainstalowaniu w module setup.py install, próbuję uruchomić nóż-cli, ale nadal wyrzucam ten błąd:
$ knife-cli
Traceback (most recent call last):
File "/usr/bin/knife-cli", line 9, in <module>
load_entry_point('Knife==0.3', 'console_scripts', 'knife-cli')()
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 468, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2563, in load_entry_point
return ep.load()
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2254, in load
['__name__'])
File "/usr/bin/knife.py", line 4, in <module>
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 646, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 1559, in run_script
raise ResolutionError("No script named %r" % script_name)
pkg_resources.ResolutionError: No script named 'knife.py'
Co tak naprawdę się dzieje? i jak mogę to rozwiązać?
Dlaczego zdefiniowałeś punkt wejścia i skrypt o tej samej nazwie? – davidism
Po prostu skopiowałem tę samą logikę, co setup.py w projekcie django, jest to po prostu dlatego, że ma on końcowe .py (knife-cli i knife-cli.py). –