问题:在代码中安装python模块
我需要直接在脚本中从PyPi安装软件包。也许有一些模块或distutils
(distribute
,pip
等)功能使我可以执行类似的操作,pypi.install('requests')
并且请求将被安装到我的virtualenv中。
回答 0
从脚本安装软件包的官方推荐方法是通过子进程调用pip的命令行界面。pip不支持此处提出的大多数其他答案。此外,自pip v10起,所有代码都已pip._internal
精确定位,以使用户清楚不允许以编程方式使用pip。
使用sys.executable
,以确保您将调用相同pip
与当前运行相关联。
import subprocess
import sys
def install(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
回答 1
您还可以使用类似:
import pip
def install(package):
if hasattr(pip, 'main'):
pip.main(['install', package])
else:
pip._internal.main(['install', package])
# Example
if __name__ == '__main__':
install('argh')
回答 2
如果要用于pip
安装所需的软件包并在安装后将其导入,则可以使用以下代码:
def install_and_import(package):
import importlib
try:
importlib.import_module(package)
except ImportError:
import pip
pip.main(['install', package])
finally:
globals()[package] = importlib.import_module(package)
install_and_import('transliterate')
如果您以用户身份安装软件包,则可能会遇到不能仅导入软件包的问题。请参阅如何刷新sys.path?有关其他信息。
回答 3
这应该工作:
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
回答 4
我在@Aaron的答案中添加了一些异常处理。
import subprocess
import sys
try:
import pandas as pd
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", 'pandas'])
finally:
import pandas as pd
回答 5
您可以使用“ install_requires”选项在自己程序包的setup.py中定义从属模块。
如果您的软件包需要生成一些控制台脚本,则可以使用“ console_scripts”入口点来生成包装脚本,该脚本将被放置在“ bin”文件夹(例如您的virtualenv环境)中。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。