为什么我的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为有效设置。