如何访问Python包的数据文件

时间:2017-11-02 09:25:41

标签: python

假设我有一个小的Python包:

/mypack
/mypack/__init__.py
/mypack/mod1.py
/mypack/mod2.py
/mypack/table.csv

如果我需要mod2中的mod1,我可以很容易地进行相对导入:

# mod2.py
from .mod2 import something

此软件包可以复制到任何地方并从中访问,并且可以立即使用。

现在假设我在/mypack/table.csv中也需要mod2

如何以无论我访问模块的位置或复制位置的方式访问该文件?

两个评论:

  • 没有数据文件,我只需要复制文件夹。我想 维护该功能,而不是使用部署工具。 (因为 我目前将Python代码rsync到几台远程计算机和 只是在那里运行它。如果有更多的工具会变得不方便 播放。)
  • 可以选择使用os查询源文件的路径 包。但这似乎并不完全可移植。

1 个答案:

答案 0 :(得分:0)

从导入的模块中,特殊变量__file__是模块的路径。它是可选的(未在交互式Python会话中定义),但它应该适用于您的用例。

所以你需要mod2模块:

csv_path = os.path.join(dirname(__file__), 'table.csv')

从模块外部,您可以使用:

csv_path = os.path.join(dirname(mod2.__file__), 'table.csv')