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

时间:2016-07-28 17:05:14

标签: python

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

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

2 个答案:

答案 0 :(得分:1)

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

我宁愿查看使您的应用程序成为独立可执行文件的选项,例如here所述。

答案 1 :(得分:1)

  

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

是的,不止一个。

一个是pex

  

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

另一个是Platter

  

Platter是一个Python工具,可以简化Unix上的部署   服务器。这是一个围绕点,virtualenv和车轮和辅助设备的薄包装   创建可以在不编译或下载的情况下安装的软件包   在服务器上。