加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 19:01:34 所属栏目:Linux 来源:网络整理
导读:我想编写一个脚本来自动设置一个全新的ubuntu安装并安装一个基于django的应用程序.由于脚本将在新服务器上运行,因此Python脚本需要自动安装一些必需的模块. 这是脚本. #!/usr/bin/env pythonimport subprocessimport osimport sysdef pip_install(mod): prin

我想编写一个脚本来自动设置一个全新的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的安装是成功的,但下一行导入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和pip.好像你正试图自动化部署(这很好!),在我的工具带中我还有virtualenvwrapper,vagrant和ansible.

这是我的输出:

(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...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读