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(),
...
)