Python setuptools sdist:仅安装版本化文件 [英] Python setuptools sdist: Installing only versioned files
问题描述
我想创建一个自动仅包含Subversion版本控制文件的源代码分发包,然后安装这些相同的文件。
如果我在setup.py中使用setuptools.setup()
调用,但不包含packages
或include_package_data
的设置,并运行python setup.py sdist build
,我会得到一个仅包含我的版本化文件的包,这正是我所需要的。但是,当我尝试安装此程序包时,只创建了空目录。未安装任何文件。
packages = setuptools.find_packages()
并运行python setup.py sdist build
,我会得到一个包,其中包含我的源树中的所有文件,而不仅仅是版本化文件。安装此程序包时,将安装该程序包中的所有文件。
我在setup()
中使用的其他参数仅用于元数据(名称、版本等)。
如何创建只包含目录树中的版本化文件的包,然后安装这些相同的文件?
背景
我已验证在没有packages
和include_package_data
设置的情况下创建的包是否包含正确的文件(仅包括版本化文件)。
我认为基本问题是选择要包含在包中的文件的逻辑与确定从包中安装哪些文件的逻辑断开。因此,这两组文件(包含和安装)可以是完全不同的,并且安装集甚至不一定是包含集的子集。也就是说,很有可能创建包含不会安装的文件的包,并创建试图安装甚至不在包中的文件的包。
包含集逻辑在构建时运行,安装集逻辑在安装时运行。确定哪些文件在集合中的因素包括MANIFEST
、MANIFEST.in
、packages
、py_modules
、data_files
、include_package_data
、源文件夹树中的文件、包中的文件和版本化元数据,显然,尝试操作安装集可能也可能不会修改包含集。
MANIFEST
、MANIFEST.in
、packages
、py_modules
、data_files
和include_package_data
中的任何一个,setupTools将创建一个专门基于在源文件夹树中查找版本化文件的包含集。但这会使安装集为空。然后,如果我包含一个packages
参数,则setupTools会将未版本化的文件添加到包含集中,从而中断版本化文件选择,并在安装集中使用所有这些文件。
换句话说,我正在尝试使安装集与包含集完全匹配,而不会导致setupTools将未版本化的文件添加到包含集。
推荐答案
我找到了一种让setupTools支持它的方法。我只需在安装程序包时提供packages
列表,在构建程序包时将其保留为None。我还使用include_package_data = True
获取要安装的数据文件(如果没有它,数据文件将包含在包中,但不会安装)。
if 'install' in sys.argv:
packages = setuptools.find_packages()
else:
packages = None
setuptools.setup(
packages = packages,
include_package_data = True,
...
)
这篇关于Python setuptools sdist:仅安装版本化文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!