假设我有一个小的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
。
如何以无论我访问模块的位置或复制位置的方式访问该文件?
两个评论:
os
查询源文件的路径
包。但这似乎并不完全可移植。答案 0 :(得分:0)
从导入的模块中,特殊变量__file__
是模块的路径。它是可选的(未在交互式Python会话中定义),但它应该适用于您的用例。
所以你需要mod2模块:
csv_path = os.path.join(dirname(__file__), 'table.csv')
从模块外部,您可以使用:
csv_path = os.path.join(dirname(mod2.__file__), 'table.csv')