python - 如何从模块中找到源代码路径
问题描述
/Document/pythonpackage
我有一个从目录中的源代码构建的 python 包
/Document/pythonpackage/> python setup.py install
site-packages
这将在python 目录中创建一个文件夹
import pythonpackage
print(pythonpackage.__file__)
>/anaconda3/lib/python3.7/site-packages/pythonpackage-x86_64.egg/pythonpackage/__init__.py
我在多个环境中运行脚本,所以我知道我将拥有的唯一路径是pythonpackage.__file__
. 但是 Document/pythonpackage 有一些不在站点包中的数据有没有办法自动找到路径,/Document/pythonpackage
因为您只能访问 python 中的模块?
解决方案
不鼓励这样工作。通常假设在安装软件包后,用户可以删除安装目录(就像大多数自动软件包管理器所做的那样)。相反,您要确保setup.py
将任何数据文件复制到相关位置,然后您的代码将从那里提取它们。
假设您使用的是标准setuptools
,您可以看到有关 Include Data Files的文档,它在底部显示:
总之,这三个选项允许您:
include_package_data
接受 MANIFEST.in 匹配的所有数据文件和目录。
package_data
指定其他模式以匹配 MANIFEST.in 可能匹配或不匹配的文件或在源代码管理中找到的文件。
exclude_package_data
指定安装包时不应包含的数据文件和目录的模式,即使它们由于使用了前面的选项而本来应该包含在内。
然后说:
通常,现有程序会操纵包的
__file__
属性以查找数据文件的位置。但是,这种操作与基于 PEP 302 的导入挂钩不兼容,包括从 zip 文件和 Python Eggs 导入。强烈建议,如果您正在使用数据文件,您应该使用 ResourceManager APIpkg_resources
来访问它们