gpt4 book ai didi

python - 如何在运行时安装和导入 Python 模块?

转载 作者:IT王子 更新时间:2023-10-29 00:45:40 31 4
gpt4 key购买 nike

我想编写一个脚本来自动设置一个全新的 ubuntu 安装并安装一个基于 django 的应用程序。由于脚本将在新服务器上运行,因此 Python 脚本需要自动安装一些必需的模块。

这是脚本。

#!/usr/bin/env python

import subprocess
import os
import sys

def pip_install(mod):
print subprocess.check_output("pip install %s" % mod, shell=True)

if __name__ == "__main__":
if os.getuid() != 0:
print "Sorry, you need to run the script as root."
sys.exit()

try:
import pexpect
except:
pip_install('pexpect')
import pexpect

# More code here...

pexpect 安装成功,但是下一行import pexpect 失败。我认为这是因为在运行时代码不知道新安装的 pexpect

如何在运行时安装和导入 Python 模块?我对其他方法持开放态度。

最佳答案

您可以导入 pip 而不是使用子进程:

import pip

def install(package):
pip.main(['install', package])

# Example
if __name__ == '__main__':
try:
import pexpect
except ImportError:
install('pexpect')
import pexpect

另一个镜头:

import pip

def import_with_auto_install(package):
try:
return __import__(package)
except ImportError:
pip.main(['install', package])
return __import__(package)

# Example
if __name__ == '__main__':
pexpect = import_with_auto_install('pexpect')
print(pexpect)

[编辑]

您应该考虑使用 requirements.txt连同点子。好像您正在尝试自动化部署(这很好!),在我的工具带中我还有 virtualenvwrapper,vagrantansible .

这是我的输出:

(test)root@vagrant:~/test# pip uninstall pexpect
Uninstalling pexpect:
/usr/lib/python-environments/test/lib/python2.6/site-packages/ANSI.py
/usr/lib/python-environments/test/lib/python2.6/site-packages/ANSI.pyc
/usr/lib/python-environments/test/lib/python2.6/site-packages/FSM.py
/usr/lib/python-environments/test/lib/python2.6/site-packages/FSM.pyc
/usr/lib/python-environments/test/lib/python2.6/site-packages/fdpexpect.py
/usr/lib/python-environments/test/lib/python2.6/site-packages/fdpexpect.pyc
/usr/lib/python-environments/test/lib/python2.6/site-packages/pexpect-2.4-py2.6.egg-info
/usr/lib/python-environments/test/lib/python2.6/site-packages/pexpect.py
/usr/lib/python-environments/test/lib/python2.6/site-packages/pexpect.pyc
/usr/lib/python-environments/test/lib/python2.6/site-packages/pxssh.py
/usr/lib/python-environments/test/lib/python2.6/site-packages/pxssh.pyc
/usr/lib/python-environments/test/lib/python2.6/site-packages/screen.py
/usr/lib/python-environments/test/lib/python2.6/site-packages/screen.pyc
Proceed (y/n)? y
Successfully uninstalled pexpect
(test)root@vagrant:~/test# python test.py
Downloading/unpacking pexpect
Downloading pexpect-2.4.tar.gz (113Kb): 113Kb downloaded
Running setup.py egg_info for package pexpect
Installing collected packages: pexpect
Running setup.py install for pexpect
Successfully installed pexpect
Cleaning up...
<module 'pexpect' from '/usr/lib/python-environments/test/lib/python2.6/site-packages/pexpect.pyc'>
(test)root@vagrant:~/test#

关于python - 如何在运行时安装和导入 Python 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17234762/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com