我想在Python包中(包括我的例子,这些是C++头文件),在安装其他包时使用,这些包使用它作为依赖项(从这里^ {CD2>})。p>
为了使mypackage
在源发行版中包含这些文件并使相同的文件可安装,我执行了以下操作:
MANIFEST.in
包文件中的文件:graft <folder_with_files>
data_files
下的setup.py
文件中的文件李>setup(
name = 'mypackage',
packages = ['mypackage'],
...
data_files = ["folder_path", ("the", "files")]
)
到目前为止,将它们放在两个位置可以使mypackage
正确安装,同时使用distutils
、setuptools
或pip
(本地和来自PyPI)时包含的非Python文件。使用setuptools
和pip
时,我可以在sys.prefix
中的folder_path
下找到非Python文件-例如:
import sys, os
os.path.join(sys.prefix, "folder_path")
当使用distutils
时,它们与python文件位于同一文件夹下,因此可以通过mypackage.__file__
找到它们
import re, mypackage
re.sub(r"__init__\.py$", "", mypackage.__file__) + "folder_path"
但问题是:当另一个将其用作依赖项的包通过PEP518使用pyproject.toml
文件指定了此依赖项时,从PyPI下载mypackage
,并安装在PEP518生成的临时环境中,但非Python文件不在sys.prefix
下,它们安装在一些随机命名的临时文件夹下,如下所示:
$TEMP_FOLDER/pip-build-env-otci9gxx/overlay/folder_path
因此,试图在sys.prefix
或mypackage.__file__
的根目录下查找文件的脚本不会选择这些文件
如何从other_package
的setup.py
以编程和确定的方式获取这些文件在PEP518环境中的安装路径
是否确实要使用
data_files
我建议改用
package_data
。这样,文件是Python包本身的一部分(例如安装在site-packages
中),一旦安装,就很容易检索资源:
使用以下任一选项访问已安装的软件包数据:
1.^{}
2.^{}
3.^{}
相关问题 更多 >
编程相关推荐