为什么我的Python Click命令不起作用?
问题描述:
这里是我的项目代码结构:为什么我的Python Click命令不起作用?
pynique
├── cli
│ ├── __init__.py
│ └── pynique_ops.py
├── pynique
│ ├── __init__.py
├── README.md
├── setup.cfg
└── setup.py
我setup.py
内容是:
from setuptools import (
find_packages,
setup
)
print find_packages()
setup(
name='pynique',
version='0.1.1.dev1',
description='pynique app',
classifiers=[
'Development Status :: 2 - Pre-Alpha',
'License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)'
],
packages=find_packages(exclude=['tests']),
include_package_data=True,
install_requires=[
'jinja2',
'PyYAML',
'Click'
],
entry_points='''
[console_scripts]
start-pynique=pynique.cli.pynique_ops:start
''',
)
我做这里面pynique顶层文件夹项目: - pip install -e .
但我start-pynique
是没有工作,它会抛出这个错误:
Traceback (most recent call last):
File "/home/agung/.virtualenvs/pynique/bin/start-pynique", line 11, in <module>
load_entry_point('pynique', 'console_scripts', 'start-pynique')()
File "/home/agung/.virtualenvs/pynique/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 542, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/home/agung/.virtualenvs/pynique/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2569, in load_entry_point
return ep.load()
File "/home/agung/.virtualenvs/pynique/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2229, in load
return self.resolve()
File "/home/agung/.virtualenvs/pynique/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2235, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
ImportError: No module named cli.pynique_ops
(pynique)
你知道它为什么没有名为cli.pynique_ops
的模块吗?我的setup.py有什么问题吗?
答
我终于知道了修复。 Python setup.py install会将根目录(pynique
)中的所有目录作为包名称发布。
因此,如果我仍然使用与所述问题相同的文件夹结构,则cli
,pynique
将作为python包安装。所以修正应该是这样的start-pynique=cli.pynique_ops:start
。
但是,而不是使用该文件夹结构,我改变它是这样的:
pynique
├── pynique
│ ├── cli
│ │ ├── __init__.py
│ │ ├── pynique_ops.py
├── README.md
├── setup.cfg
├── setup.py
所以,我仍然可以使用start-pynique=pynique.cli.pynique_ops:start
为有效设置。