首页 > 解决方案 > 如何从模块中找到源代码路径

问题描述

/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 中的模块?

标签: pythonsetup.pysite-packages

解决方案


不鼓励这样工作。通常假设在安装软件包后,用户可以删除安装目录(就像大多数自动软件包管理器所做的那样)。相反,您要确保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来访问它们


推荐阅读