Python 正在安装数据文件,然后再次找到它们
Python Installing data files and then finding them again
我有一个针对 linux 机器的 python 软件包,需要将其语言环境文件安装到可访问的位置。现在,我将它们安装到 sys.prefix + "/share/locale/"
.
但是,我发现 Ubuntu 和 pip 有一个小警告。在默认情况下,Ubuntu 将使用 pip 安装的软件包安装到 /usr/local
并在安装期间将 sys.prefix
设置为该值。但是,安装后,当包为 运行 时,前缀为 /usr
,这意味着我的代码无法找到安装在 /usr/local
.
的语言环境文件
我可以简单地对位置进行硬编码,但我不想这样做,因为它会降低软件包的可移植性,并且需要用户以 root 身份安装它。这些在 setup.py 中作为 data_files
添加,不会作为 python 包被发现。
我还能如何确保我的包可以在之后找到我的语言环境文件
安装?
我想在安装过程中向包的 __init__.py
添加一行,这会创建一个指向语言环境目录位置的变量。但是,在不更改源文件的情况下编辑正在安装的文件似乎并不简单。
这是一个 python 3 包。
也许使用 resource functions available in 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')
我有一个针对 linux 机器的 python 软件包,需要将其语言环境文件安装到可访问的位置。现在,我将它们安装到 sys.prefix + "/share/locale/"
.
但是,我发现 Ubuntu 和 pip 有一个小警告。在默认情况下,Ubuntu 将使用 pip 安装的软件包安装到 /usr/local
并在安装期间将 sys.prefix
设置为该值。但是,安装后,当包为 运行 时,前缀为 /usr
,这意味着我的代码无法找到安装在 /usr/local
.
我可以简单地对位置进行硬编码,但我不想这样做,因为它会降低软件包的可移植性,并且需要用户以 root 身份安装它。这些在 setup.py 中作为 data_files
添加,不会作为 python 包被发现。
我还能如何确保我的包可以在之后找到我的语言环境文件 安装?
我想在安装过程中向包的 __init__.py
添加一行,这会创建一个指向语言环境目录位置的变量。但是,在不更改源文件的情况下编辑正在安装的文件似乎并不简单。
这是一个 python 3 包。
也许使用 resource functions available in 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')