有了python模块,在运行之前安装它自己的依赖项
许多软件包要求系统用户在使用软件之前先安装一组依赖项。(这是一个不特定于python的一般性问题,但我将在python的上下文中讨论。)。如果依赖项还没有安装,我们不能让python模块在执行代码之前安装它自己的依赖项吗。在有了python模块,在运行之前安装它自己的依赖项,python,virtualenv,dependency-management,Python,Virtualenv,Dependency Management,许多软件包要求系统用户在使用软件之前先安装一组依赖项。(这是一个不特定于python的一般性问题,但我将在python的上下文中讨论。)。如果依赖项还没有安装,我们不能让python模块在执行代码之前安装它自己的依赖项吗。在系统或子流程调用的帮助下,这应该是可行的,但我很少看到有人这样做 例如,假设lib是一个python库,需要在python文件main.py中使用: import os try: import lib except: os.system('pip instal
系统
或子流程
调用的帮助下,这应该是可行的,但我很少看到有人这样做
例如,假设lib
是一个python库,需要在python文件main.py中使用:
import os
try:
import lib
except:
os.system('pip install pdir')
import lib
# Can make use of lib now
这种方法是否有潜在的错误?这样做会给大项目带来问题吗
注意:这里的优点是,使用该文件的用户不必单独安装依赖项,他只需运行
python main.py
。我意识到的第二件事是,这种方法只有在使用virtualenv
时才有意义。你不应该这样做-pip没有依赖解析,所以不能保证你会得到某个版本。应使用setup.py
、requirements.txt
或其他方法安装依赖项
您也不应该仅仅为了运行代码而需要用户权限或sudo来安装软件包。用户应该知道安装软件包所需的软件包,因为它们可能来自PyPI或操作系统的软件包系统或公司内部的PyPI镜像-在这种情况下,静默安装依赖项不是一个好主意。您永远不应该这样做-pip没有依赖项解析,因此无法保证你会得到一个特定的版本。应使用
setup.py
、requirements.txt
或其他方法安装依赖项
您也不应该仅仅为了运行代码而需要用户权限或sudo来安装软件包。用户应该知道安装包所需的包,因为它们可能来自PyPI或OS的包系统或内部公司PyPI镜像,并且在这种情况下默默无闻地安装依赖项不是一个好主意。 < P>您可以总是考虑使用更高级的打印语句来通知用户。
try:
import ConfigParser
except ImportError as err:
print '\n'.join([i + ''.join(str(err).split(' ')[-1:]) for i in ['$ pip install ', '$ easy_install ']])
您可以建议他们以这种方式安装丢失的软件包
$ pip install ConfigParser
$ easy_install ConfigParser
另外,您可以考虑有一个“导入恐怖”的理由,建议用户运行其<代码> /Stuto.Py < /C>或<代码> /安装< <代码>,而不只是丢失的模块。
< P>您可以考虑使用更高级的打印语句来通知用户。try:
import ConfigParser
except ImportError as err:
print '\n'.join([i + ''.join(str(err).split(' ')[-1:]) for i in ['$ pip install ', '$ easy_install ']])
您可以建议他们以这种方式安装丢失的软件包
$ pip install ConfigParser
$ easy_install ConfigParser
另外,你可以考虑有一个“导入恐怖”的理由来推荐用户运行他们的<代码> /Studio.Py < /C>或<代码> /安装< <代码>,而不仅仅是缺少的模块。
在安装程序中执行,而不是在运行时!你真的不应该默默地在人们的电脑上安装软件包。你会惹恼一些人的。嗯,这是有道理的。虽然我不确定人们是否应该担心他们的virtualenv中安装了python软件包。@Vincenzzochi很多系统都对这种事情很敏感。最好是提醒用户缺勤,他们可以修复它!在安装时执行此操作,而不是在运行时!你真的不应该默默地在人们的电脑上安装软件包。你会惹恼一些人的。嗯,这是有道理的。虽然我不确定人们是否应该担心他们的virtualenv中安装了python软件包。@Vincenzzochi很多系统都对这种事情很敏感。最好是提醒用户缺勤,他们可以修复它!