使用相对路径打包数据
Package data with relative path
我正在编写一个图形应用程序,该应用程序将依赖于包含 UI 元素的不同语言文本片段的语言文件。
我想将这些文件存储在包目录中的 lang/
目录中,该目录在执行时由主应用程序脚本导入。
但是,我无法在打开语言文件进行阅读时使用./
,因为./
是用户的工作目录,而不是导入的位置Python文件。
源代码结构看起来像
/
-- mypkg/
-- lang/
-- en_US.lang
-- es_ES.lang
-- <etc...>
-- __init__.py
-- lang.py
-- myapp (executable Python script which imports mypkg)
如何在不依赖特定工作目录的情况下可靠地从 lang/
目录读取数据?
您可以使用变量 - __file__
- 它存储正在 运行 的脚本的路径。 (这是在 python command
中使用的路径),例如,如果您使用以下命令 运行 脚本 -
python /complete/path/to/script.py
__file__
将包含 '/complete/path/to/script.py'
。如果使用相对路径,它将包含脚本的相对路径。
使用它,您应该能够加载语言文件。
也可以使用函数-os.path.abspath()
获取脚本的绝对路径-
import os.path
os.path.abspath(__file__)
我正在编写一个图形应用程序,该应用程序将依赖于包含 UI 元素的不同语言文本片段的语言文件。
我想将这些文件存储在包目录中的 lang/
目录中,该目录在执行时由主应用程序脚本导入。
但是,我无法在打开语言文件进行阅读时使用./
,因为./
是用户的工作目录,而不是导入的位置Python文件。
源代码结构看起来像
/
-- mypkg/
-- lang/
-- en_US.lang
-- es_ES.lang
-- <etc...>
-- __init__.py
-- lang.py
-- myapp (executable Python script which imports mypkg)
如何在不依赖特定工作目录的情况下可靠地从 lang/
目录读取数据?
您可以使用变量 - __file__
- 它存储正在 运行 的脚本的路径。 (这是在 python command
中使用的路径),例如,如果您使用以下命令 运行 脚本 -
python /complete/path/to/script.py
__file__
将包含 '/complete/path/to/script.py'
。如果使用相对路径,它将包含脚本的相对路径。
使用它,您应该能够加载语言文件。
也可以使用函数-os.path.abspath()
获取脚本的绝对路径-
import os.path
os.path.abspath(__file__)