拥有python模块,在运行之前安装其自己的依赖项

Pra*_*tal 0 python virtualenv dependency-management

许多软件包都要求系统用户先安装一组依赖项,然后才能使用该软件。(这是一个通用问题,并非特定于python,但我将在python的背景下进行讨论。)。如果尚未安装依赖项,我们能否在执行代码之前让python模块安装其自身的依赖项。这应该可以在systemsubprocess呼叫的帮助下完成,但我很少看到有人这样做。

例如,假设lib是一个需要在python文件main.py中使用的python

import os
try:
    import lib
except:
    os.system('pip install pdir')
    import lib

# Can make use of lib now
Run Code Online (Sandbox Code Playgroud)

这种方法有什么潜在的错误吗?这样做会给大型项目带来麻烦吗?

注意:这样做的好处是,使用该文件的用户不必单独安装依赖项,只需运行即可python main.py。我意识到的第二件事是,这种方法仅在virtualenv使用时才有意义。

Sim*_*ser 5

您永远不要这样做-pip没有依赖关系解析,因此无法保证您将获得特定版本。依赖关系应该用安装setup.pyrequirements.txt或者不同的方法。

您也不需要用户权限或sudo来安装仅用于运行代码的软件包。用户应该了解安装软件包所需的软件包,因为它们可能来自PyPI或操作系统的软件包系统或内部公司的PyPI镜像-在这种情况下,静默安装依赖项不是一个好主意。