如何从模块中找到源代码路径

时间:2019-09-06 18:11:05

标签: python setup.py site-packages

我在/Document/pythonpackage目录中有一个根据源代码构建的python包

/Document/pythonpackage/> python setup.py install

这将在python的site-packages目录中创建一个文件夹

import pythonpackage
print(pythonpackage.__file__)
>/anaconda3/lib/python3.7/site-packages/pythonpackage-x86_64.egg/pythonpackage/__init__.py

我正在多个环境上运行脚本,因此我知道的唯一路径是pythonpackage.__file__。但是Document / pythonpackage的某些数据不在site-packages中,如果您只能访问python中的模块,有没有一种方法可以自动找到/Document/pythonpackage的路径?

2 个答案:

答案 0 :(得分:1)

不鼓励那样工作。通常假定安装软件包后,用户可以删除安装目录(就像大多数自动化软件包管理器一样)。相反,您需要确保setup.py将所有数据文件复制到相关位置,然后您的代码将从那里将它们拾取。

假设您使用的是标准setuptools,则可以在Including Data Files上看到文档,该文档在底部显示:

  

总而言之,这三个选项使您可以:

     

include_package_data

     

接受MANIFEST.in匹配的所有数据文件和目录。

     

package_data

     

指定其他模式以匹配MANIFEST.in或源代码管理中可能不匹配的文件。

     

exclude_package_data

     

为安装软件包时不应该包括的数据文件和目录指定模式,即使由于使用上述选项原本会被包括在内也是如此。

然后说:

  

通常,现有程序会操纵包的__file__属性,以查找数据文件的位置。但是,此操作与基于PEP 302的导入挂钩不兼容,包括从zip文件和Python Eggs导入。强烈建议,如果您正在使用数据文件,则应该使用pkg_resources的ResourceManager API来访问它们

答案 1 :(得分:0)

不确定,但是您可以为模块创建存储库并使用pip进行安装。 egg文件夹中将有一个名为PKG-INFO的文件,其中包含您从中导入模块的存储库的URL。