((编辑:我在写这个问题时打错了:我在脚本中的“ pyparsing”周围加上了引号。谢谢@dswdsyd)
运行python脚本时,目标计算机上只有python标准库。当需要一个软件包时,我必须先安装它。例如,当我尝试安装pyparsing并将其导入时:
subprocess.call([sys.executable, "-m", "pip", "install", "pyparsing"])
import pyparsing
我有错误:
ModuleNotFoundError: No module named 'pyparsing'
那么如何在相同的python脚本中安装和导入软件包?
[[Update:]]在脚本的第二次运行中,可以导入包。奇怪。
尝试一下:
import subprocess
import sys
subprocess.call([sys.executable, "-m", "pip", "install", "pyparsing"])
import pyparsing
importlib.invalidate_caches()
解决的问题。根据importlib的文档:importlib.invalidate_caches()使...的内部缓存无效查找器存储在sys.meta_path中。如果发现者实施invalidate_caches(),则将调用它执行无效。如果有任何模块,则应调用此函数在程序运行时创建/安装,以保证所有查找者将注意到新模块的存在。