Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我需要在setup.py中包含子包_Python_Setuptools_Setup.py - Fatal编程技术网

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

Python 为什么我需要在setup.py中包含子包,python,setuptools,setup.py,Python,Setuptools,Setup.py,我有一个名为mltester的python包,它包含两个子包(actions,dialogs)和一个主脚本ml_tester.py,结构如下: + <ProjectFolder> +---+ <mltester> | +---- <actions> | +---- <dialogs> | +---- ml_tester.py | +---- __init__.py +---- setup.py import actions imp

我有一个名为
mltester
的python包,它包含两个子包(
actions
dialogs
)和一个主脚本
ml_tester.py
,结构如下:

+ <ProjectFolder>
+---+ <mltester>
|   +---- <actions>
|   +---- <dialogs>
|   +---- ml_tester.py
|   +---- __init__.py
+---- setup.py
import actions
import dialogs
import ml_tester
ml_tester.py
中,我执行以下操作:

from actions import *
from dialogs import *
从eclipse运行时,所有这些都可以正常工作。执行
pip安装
时,以下
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
File”/usr/local/lib/python2.7/dist-packages/mltester/_init__.py“,第1行,在
进口行动
ImportError:没有名为actions的模块

我不明白为什么只列出包含
mltester
包是不够的。当然,我可以简单地将包添加回去,但现在我认为我缺少了一些更具概念性的内容。

因为
不在子树中进行任何包查找。将包添加到
包中
将只包括包本身和所有直接子模块,但不包括任何子包

例如,如果您有一个包含模块
eggs
和子包
bacon
的包
spam
的源代码树:

src
└── spam
    ├── __init__.py
    ├── eggs.py
    └── bacon
        └── __init__.py
指定
packages=['spam']
将只包括
spam
spam.eggs
,但不包括
spam.bacon
,因此不会安装
spam.bacon
。您必须单独添加它以包含完整的源代码库:
packages=['spam','spam.bacon']

要自动生成
列表,
设置工具


请注意,
find_packages()
通常会选择通常不是您想要的测试。@shuckc这就是
find_packages
中的
exclude
参数的作用。
from setuptools import find_packages, setup

setup(
    packages=find_packages(),
    ...
)