【问题标题】:python load module get error after installpython加载模块安装后出错
【发布时间】:2018-09-17 06:51:11
【问题描述】:

为什么脚本在运行状态下使用系统命令安装包后找不到新模块

目录结构是什么样的:

mymoduledir  
|- target_module_dir  
|- main.py

main.py 代码如下:

if __name__ == "__main__":

try:
    import target_module
    print("module already exist")
    # to-do something

except ImportError:
    print("has not target_module, start install")
    os.system("cd target-module-dir && python setup.py install")
    print("install finished")

    import target_module
    # to-do something

我发现: 如果python环境没有目标模块,我的脚本会自动安装成功,但是我得到了导入错误。日志显示:

没有 target_module,开始安装
正在运行安装 .....
已完成 target_module 的处理依赖项
安装完成
Traceback(最近一次调用最后):
文件“.\main.py”,第 237 行,在
import target_module ImportError: 没有名为 target_module_name 的模块

表示目标模块安装成功,但是我想导入时遇到了importerror。为了证明我的结论,我打开python shell尝试导入目标模块,它作品。当我重新运行此脚本时,日志显示:

模块已经存在

表示此脚本成功导入目标模块

我的想法是: 脚本在启动前会检查python环境,如果我想在脚本运行状态下导入新模块,我需要让脚本知道环境已经更新。

我尝试的是: 我搜索了许多相关的问题,但我没有一个有效的解决方案。 For some reason, I must use python2.6 to complete my function.我尝试使用重新加载功能,像这样,但它不能工作。
我应该怎么做才能解决这个问题?

【问题讨论】:

  • kafka 包不支持 Python 2.6 及以下版本。考虑更新到最新的 Python 和服务器操作系统版本。
  • @KlausD。这个问题与模块名称无关,我已经成功安装kafka-1.3.5到py2.6。请看我的更新,谢谢
  • 如果您的模块需要这些依赖项,为什么不将它们作为安装模块的一部分引入?
  • @MisterMiyagi 因为物理机没有上网权限,我们也没有私有镜像站点可以使用,所以只能通过源码安装。
  • @MisterMiyagi 我明白你的意思,但我必须这样做。我知道如何使用标准安装方式,但是我的老板强迫我这样做,因为这个脚本将被其他部门使用,我的老板不想他们做很多操作,他们需要做的就是复制我的代码,然后运行它。而且我认为你没有回答这个问题的核心问题,为什么脚本在运行状态下使用系统命令安装包后找不到新模块。

标签: python python-import


【解决方案1】:

使用 pip install 会很好,我的解决方案:

import pip

if __name__ == "__main__":

try:
    import target_module
    print("module already exist")
    # to-do something

except ImportError:
    print("has not target_module, start install")
    pip.main(['install', './target_module_dir/'])
    print("install finished")
    import target_module
    # to-do something

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-06
    • 2015-07-16
    • 2012-01-21
    • 1970-01-01
    • 2014-10-13
    • 2018-04-04
    • 2016-11-29
    相关资源
    最近更新 更多