【发布时间】: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