【发布时间】:2019-07-10 15:37:40
【问题描述】:
我想在运行时安装和导入Python 3 模块。
我正在使用以下函数在运行时使用pip 安装模块:
def installModules(modules):
for module in modules:
print("Installing module {}...".format(module))
subprocess.call([sys.executable, "-m", "pip", "install", "--user", module])
模块安装成功,但安装完成后我无法在运行时导入它。所以如果我这样做:
modules = [ "wget", "zipfile2" ]
installModules(module)
import wget
我收到了ModuleNotFoundError。如果在那之后,我开始另一个 Python 3 会话,我可以使用这些模块,例如wget,这意味着模块已安装,但它们不适用于当前的 Python 3 会话。
是否可以在 Python 3 中安装,然后在同一个 Python 3 会话中导入已安装的模块,即在安装之后?
谢谢!
编辑:
在 VirtualBox 中全新安装 Ubuntu 19.04,在 sudo apt-get install python3-pip 之后,运行以下脚本:
import os, sys
import subprocess
def installModules(modules):
for module in modules:
print("Installing module {}...".format(module))
subprocess.call([sys.executable, "-m", "pip", "install", "--user", module])
def process():
modulesToInstall = [ "wget", "zipfile2" ]
installModules(modulesToInstall)
process()
import wget
def main():
wget.download("http://192.168.2.234/test/configure.py")
if __name__ == "__main__":
main()
我明白了:
user@user-VirtualBox:~$ python3 script.py
Installing module wget...
Collecting wget
Installing collected packages: wget
Successfully installed wget-3.2
Installing module zipfile2...
Collecting zipfile2
Using cached https://files.pythonhosted.org/packages/60/ad/d6bc08f235b66c11bbb76df41b973ce93544a907cc0e23c726ea374eee79/zipfile2-0.0.12-py2.py3-none-any.whl
Installing collected packages: zipfile2
Successfully installed zipfile2-0.0.12
Traceback (most recent call last):
File "script.py", line 17, in <module>
import wget
ModuleNotFoundError: No module named 'wget'
Python 3 版本是:
user@user-VirtualBox:~$ python3 --version
Python 3.7.3
pip3 版本是:
user@user-VirtualBox:~$ pip3 --version
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)
其他信息:
user@user-VirtualBox:~$ whereis python3
python3: /usr/bin/python3.7m /usr/bin/python3.7-config /usr/bin/python3.7 /usr/bin/python3 /usr/bin/python3.7m-config /usr/lib/python3.7 /usr/lib/python3.8 /usr/lib/python3 /etc/python3.7 /etc/python3 /usr/local/lib/python3.7 /usr/include/python3.7m /usr/include/python3.7 /usr/share/python3 /usr/share/man/man1/python3.1.gz
有什么想法吗?
【问题讨论】:
-
@JohnHennig 感谢您抽出宝贵时间,请查看我的编辑
标签: python python-3.x pip subprocess