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