3 回答

TA贡献1817条经验 获得超14个赞
已更新为更新的点子版本(> = 10.0):
try:
import zumba
except ImportError:
from pip._internal import main as pip
pip(['install', '--user', 'zumba'])
import zumba
感谢@Joop,我得以提出正确的答案。
try:
import zumba
except ImportError:
import pip
pip.main(['install', '--user', 'zumba'])
import zumba
重要的一点是,这将不需要root访问权限,因为它将模块安装在用户目录中。
不知道它是否适用于二进制模块或需要编译的模块,但显然适用于纯Python模块。
现在,您可以编写自包含脚本,而不必担心依赖关系。

TA贡献1887条经验 获得超5个赞
从pip版本> = 10.0.0开始,由于内部软件包的重组,上述解决方案将不起作用。现在,在脚本中使用pip的新方法如下:
try: import abc
except ImportError:
from pip._internal import main as pip
pip(['install', '--user', 'abc'])
import abc

TA贡献1900条经验 获得超5个赞
我想指出,当前接受的答案可能会导致应用名称冲突。从应用程序名称空间导入无法全面了解系统上已安装的内容。
更好的方法是:
import pip
packages = [package.project_name for package in pip.get_installed_distributions()]
if 'package' not in packages:
pip.main(['install', 'package'])
添加回答
举报