我有一个针对Linux机器的python软件包,需要将其语言环境文件安装到可访问的位置。现在,我将它们安装到sys.prefix + "/share/locale/"
.
但是,我发现了Ubuntu和pip的一个小警告。在默认条件下,Ubuntu 会安装 pip 到/usr/local
安装的软件包,并在安装过程中将sys.prefix
设置为该软件包。但是,安装后,当包运行时,前缀是/usr
,这意味着我的代码找不到安装在/usr/local
的语言环境文件。
我可以简单地对位置进行硬编码,但我不想这样做,因为它会使软件包的可移植性降低,并且需要用户将其作为 root 安装。这些作为data_files
添加到 setup.py 中,不会作为 python 包被发现。
我还能如何确保我的包可以在之后找到我的语言环境文件 安装?
我想过在安装过程中向包的__init__.py
添加一行,这会创建一个指向区域设置目录位置的变量。但是,在不更改源文件的情况下编辑正在安装的文件似乎并非易事。
这是一个仅限python 3的软件包。
也许使用pkg_resources
中可用的资源函数来查找文件?
from pkg_resources import resource_stream, resource_filename
with resource_stream('my_package', 'locale/foo.dat') as infp:
# ...
# ... or ...
foo_location = resource_filename('my_package', 'locale/foo.dat')