为什么我需要在setup.py中包含子包装



我有一个称为mltester的Python软件包,其中包含两个子包(actionsdialogs(和一个主脚本ml_tester.py,构成如下:

+ <ProjectFolder>
+---+ <mltester>
|   +---- <actions>
|   +---- <dialogs>
|   +---- ml_tester.py
|   +---- __init__.py
+---- setup.py

我的__init__.py看起来如下:

import actions
import dialogs
import ml_tester

ml_tester.py中,我做类似的事情:

from actions import *
from dialogs import *

从Eclipse跑步时都可以正常工作。执行pip install时,以下setup.py工作正常:

from setuptools import setup
setup(
    name="MLTester",
    version="1.0",
    packages=["mltester",
              "mltester.actions",
              "mltester.dialogs"],
    install_requires=[
        "matplotlib",
    ],
    entry_points='''
        [console_scripts]
        ml_tester_gui=mltester.ml_tester:main
    '''
)

但是,当我从软件包列表中删除"mltester.actions""mltester.dialogs"时,我现在得到一个错误:

File "/usr/local/lib/python2.7/dist-packages/mltester/__init__.py", line 1, in <module>
    import actions
ImportError: No module named actions

我不明白为什么仅列出包含mltester软件包是不够的。当然,我可以简单地添加包装,但是现在我认为我在这里缺少一些概念性。

因为packages在子树中不做任何软件包查找。将软件包添加到packages仅包括软件包本身和所有直接的子模型,但没有一个子弹。

例如,如果您的源树带有包含模块eggs和Subpakage bacon的软件包spam

src
└── spam
    ├── __init__.py
    ├── eggs.py
    └── bacon
        └── __init__.py

指定packages=['spam']仅包括spamspam.eggs,但不包括spam.bacon,因此不会安装spam.bacon。您必须单独添加它以包括完整的源代码库:packages=['spam', 'spam.bacon']

为了自动化packages列表的构建,setuptools提供了方便的功能find_packages

from setuptools import find_packages, setup
setup(
    packages=find_packages(),
    ...
)

相关内容

  • 没有找到相关文章

最新更新