Python:在运行时根据requirements.txt设置PYTHONPATH

Python:在运行时根据requirements.txt设置PYTHONPATH,python,Python,我有一个带有命令行脚本的Python应用程序。我通过setuptools“入口点”功能公开脚本。每当用户运行脚本时,我希望环境与包的requirements.txt保持一致。这意味着环境必须包含与requirements.txt中的版本说明符匹配的每个依赖项包的版本 我知道这可以通过venv/virtualenv实现,方法是让我的用户创建一个虚拟环境,在其中安装requirements.txt,并在运行脚本时激活该虚拟环境。我不想把手动调用virtualenv的负担强加给用户。Ruby的bund

我有一个带有命令行脚本的Python应用程序。我通过
setuptools
“入口点”功能公开脚本。每当用户运行脚本时,我希望环境与包的
requirements.txt
保持一致。这意味着环境必须包含与
requirements.txt
中的版本说明符匹配的每个依赖项包的版本


我知道这可以通过
venv
/
virtualenv
实现,方法是让我的用户创建一个虚拟环境,在其中安装
requirements.txt
,并在运行脚本时激活该虚拟环境。我不想把手动调用
virtualenv
的负担强加给用户。Ruby的
bundler
通过提供
bundler/setup
,解决了这个问题——加载时,它修改Ruby的
$LOAD\u PATH
,以反映
Gemfile
(类似于
requirements.txt
)的内容。因此,它可以放在脚本的顶部,以透明地控制运行时环境。Python有等价物吗?也就是说,一种根据
requirements.txt
在运行时设置环境而不给用户带来额外复杂性的方法?

我不明白为什么Python程序不可能在导入依赖项之前安装自己的依赖项,但在Python社区中这是闻所未闻的

例如,我更愿意看看使您的应用程序成为独立可执行文件的选项

Python有等价物吗?也就是说,一种根据requirements.txt在运行时设置环境而不给用户带来额外复杂性的方法

是的,不止一个

一是

pex是一个用于生成.pex(Python可执行文件)文件的库,该文件 是符合virtualenvs精神的可执行Python环境

另一个是:

Platter是Python的一个工具,它简化了Unix上的部署 服务器。它是pip、virtualenv、wheel和aids的薄包装 创建无需编译或下载即可安装的软件包 在服务器上


在windows上:既然您正在运行一个命令行脚本,为什么不读取该文件并使用
setx PYTHONPATH
@Jean-Françoisfare好的,我会研究一下,但我希望有一个跨平台的解决方案。谢谢Markus的可能副本。让我澄清一下:我不需要脚本在运行时安装依赖项。我可以让我的用户在下载软件包后一次性安装--requirements.txt。问题是未来的稳定。该应用程序使用特定软件包的特定版本。我需要确保安装后,即使用户更新了这些包,可执行文件也会无限期地在具有这些特定版本的环境中运行。解决方案也应该是跨平台的(Windows、Mac、Linux)。我将研究
py2exe
,但我希望有一个更简单的解决方案。(née Letsencrypt)运行时在virtualenv中安装自己的依赖项,尽管从技术上讲,您运行的是一个shell脚本,该脚本执行安装,然后调用实际的程序。非常感谢
pex
是这个问题的完美解决方案。