dot*_*tty 22 python import module
我想检查模块是否存在,如果不存在,我想安装它.
我该怎么做?
到目前为止,我有这个代码,f
如果模块不存在,它会正确打印.
try:
import keyring
except ImportError:
print 'f'
Run Code Online (Sandbox Code Playgroud)
小智 18
import pip
def import_or_install(package):
try:
__import__(package)
except ImportError:
pip.main(['install', package])
Run Code Online (Sandbox Code Playgroud)
此代码只是尝试导入一个包,其中包的类型为str,如果无法,则调用pip并尝试从那里安装它.
Div*_*ava 14
注意:Ipython / Jupyter 特定解决方案。
try:
import keyring
except:
!pip install keyring
import keyring
Run Code Online (Sandbox Code Playgroud)
PS One 不妨致电conda install
或mamba install
代替。
use*_*312 12
这是应该怎么做,如果我错了,请纠正我.然而,Noufal似乎在这个问题的另一个答案中证实了这一点,所以我猜它是对的.
在编写setup.py
我编写的一些脚本的脚本时,我依赖于我的发行版的包管理器来为我安装所需的库.
所以,在我的setup.py
文件中,我这样做了:
package = 'package_name'
try:
return __import__(package)
except ImportError:
return None
Run Code Online (Sandbox Code Playgroud)
所以,如果package_name
安装,罚款,继续.否则,通过我调用的包管理器安装它subprocess
.
Fra*_*uro 11
这种动态导入方法非常适用于您只想在未安装模块时打印消息的情况.自动安装模块不应该像发送pip via那样完成subprocess
.这就是为什么我们有setuptools(或分发).
我们有一些很好的包装教程,依赖检测/安装的任务就像提供一样简单install_requires=[ 'FancyDependency', 'otherFancy>=1.0' ]
.就是这样!
但是,如果你真的需要手工做,你可以setuptools
用来帮助你.
from pkg_resources import WorkingSet , DistributionNotFound
working_set = WorkingSet()
# Printing all installed modules
print tuple(working_set)
# Detecting if module is installed
try:
dep = working_set.require('paramiko>=1.0')
except DistributionNotFound:
pass
# Installing it (anyone knows a better way?)
from setuptools.command.easy_install import main as install
install(['django>=1.2'])
Run Code Online (Sandbox Code Playgroud)