2

这是我的项目代码结构:

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 有什么问题吗?

4

1 回答 1

3

我终于知道解决办法了。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用作有效设置。

于 2016-11-23T06:53:06.283 回答