如何访问Python包的数据文件

如何访问Python包的数据文件,python,Python,假设我有一个小Python包: /mypack /mypack/__init__.py /mypack/mod1.py /mypack/mod2.py /mypack/table.csv 如果我需要mod2中mod1的某些内容,我可以轻松地进行相对导入: # mod2.py from .mod2 import something 这个软件包可以复制到任何地方,也可以从任何地方访问,并且可以立即使用 现在假设我还需要mod2中的/mypack/table.csv 无论从何处访问模块或复制模块,

假设我有一个小Python包:

/mypack
/mypack/__init__.py
/mypack/mod1.py
/mypack/mod2.py
/mypack/table.csv
如果我需要mod2中mod1的某些内容,我可以轻松地进行相对导入:

# mod2.py
from .mod2 import something
这个软件包可以复制到任何地方,也可以从任何地方访问,并且可以立即使用

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

无论从何处访问模块或复制模块,我如何访问该文件才能正常工作?

两点意见:

  • 如果没有数据文件,我只需要复制文件夹。我想 维护该功能,而不是使用部署工具。(因为 我目前正在将Python代码同步到几个远程计算机和 只要在那里运行就行了。如果有更多的工具进入,就不太方便了 播放。)
  • 可以使用
    os
    包裹但这似乎不是完全可移植的

从导入的模块中,特殊变量
\uuuu file\uuu
是模块的路径。它是可选的(不是在交互式Python会话中定义的),但它应该在您的用例中工作

因此,您需要从mod2模块中获得:

csv_path = os.path.join(dirname(__file__), 'table.csv')
在模块外部,您可以使用:

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

从导入的模块中,特殊变量
\uuuu file\uuu
是模块的路径。它是可选的(不是在交互式Python会话中定义的),但它应该在您的用例中工作

因此,您需要从mod2模块中获得:

csv_path = os.path.join(dirname(__file__), 'table.csv')
在模块外部,您可以使用:

csv_path = os.path.join(dirname(mod2.__file__), 'table.csv')
可能的重复可能的重复