基本上我的python包是这样设置的:
module
\_examples
\_folder1
\_file1.py
\_file2.py
\_folder2
\_file1.py
\_file2.py
基本上我只想用途:
package_data = {
'module': ['examples/*'],
},
因为我的项目总是有人添加例子,我希望它能很容易地从我的应用程序中列出他们。我可以让它在例子中的任何文件工作,但不通过子目录重新诅咒下来。这可能吗?
8条答案
按热度按时间q7solyqu1#
我相信你正在寻找的东西是这样的
setup.py
,它将递归地找到项目中的任何包,也要确保包括__init__.py
文件到每个包的子目录。mrphzbgm2#
在我的包根文件夹中,有一个
setup.py
文件see doc在这个文件中,我有以下代码:
回答这个问题的有趣部分是:
packages=['PackageName','PackageName.SubModule'],
通过遵循此语法,您可以将子模块包含到主包分发中。
关于所有其他参数的更多信息可以在doc中找到。
jgwigjjp3#
为此,您必须使用
MANIFEST.in
文件。我相信你会想要这样的东西:
vptzau2j4#
可以,您可以包括所有子目录。
您只需要将以下参数传递给setup()函数:
除此之外,您还需要一个MANIFEST.in文件,其内容为
这样可以确保递归地包含所有文件。
如果要专门排除某些扩展名,可以通过在
find_packages()
参数中指定exclude array来实现。例如:排除
.txt
文件您可以阅读更多关于
include_package_data
here的信息。另外,here是另一个链接,它告诉您何时不应使用
include_package_data
ubby3x7f5#
在类似的情况下,没有一个建议的答案对我有效。
我需要对我的包进行分发,它在一个子目录中包含了几个子模块,因此这些文件就是我需要进入
sdist
的文件:而且无论我尝试了什么,subdir
utils
的模块都没有包含在sdist
中。对我有效的方法是保留
config.py
的默认值:但是加上
MANIFEST.in
:ipyexperiments
下的所有内容都包括在内。如果您还没有
MANIFEST.in
,请在与config.py
相同的目录中创建它。我还向
MANIFEST.in
添加了以排除所有
tests
目录和任何不需要的*pyc
和*.pyo
文件。mlmc2os56#
您可以使用
find_packages()
的include
参数:9fkzdhlc7#
按照大卫Wolever所说的,只是为了让它更清楚一点,如果你想包含一个子目录文件夹下的所有内容,你必须显式地指定www.example.com中的每个文件MANIFEST.in,
recursive-include examples/ *.py *.png *.sh
等.....如果manifest.in能理解
examples/
并包括所有内容,那就太好了。khbbv19g8#
所有其他答案似乎都很复杂。这适用于版本9.3.15:
注意
**
而不是*
。任何文件夹中都不需要__init__.py
。