Voglio creare un'applicazione python chiamata knife che può essere eseguita dalla CLI, il problema è che non è possibile importare i moduli. Ho seguito la stessa struttura di cartelle del progetto Django come riferimento.Lo script CLI installato da setup.py di Python non consente di importare lo stesso modulo
La mia struttura di directory è come questo:
knife/
knife/
bin/
knife-cli.py
core/
main/
__init__.py
__init__.py
__init__.py
setup.py
mio setup.py
assomiglia a questo:
#!/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,
)
mio knife/core/main/__init__.py
contiene una funzione main()
e la mia knife/bin/knife-cli.py
si presenta così:
#!/usr/bin/env python
from knife.core import main
if __name__ == "__main__":
main.main()
Quindi dopo l'installazione ing il modulo con setup.py install, provo a fare funzionare il coltello-cli, ma continua a gettare questo errore:
$ 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'
Che cosa sta realmente accadendo? e come posso risolverlo?
Perché è stato definito un punto di ingresso e uno script con lo stesso nome? – davidism
Ho appena copiato la stessa logica di setup.py nel progetto django, fondamentalmente perché uno ha il file .py finale (knife-cli e knife-cli.py). –