如何在Python虚拟环境(venv)中安装Wheel包?
问题
激活Python虚拟环境(venv)后安装STPyV8的Wheel包,结果激活venv时无法导入该包,关闭venv后反而能正常使用,说明包被安装到了系统Python环境中。如何将Wheel包正确安装到venv中?
操作日志
(venv) glaucon@rome:/tmp/stpyv8$ ll total 18380 drwxrwxr-x 2 glaucon glaucon 4096 May 23 17:49 ./ drwxrwxrwt 42 root root 16384 May 23 17:49 ../ -rw-rw-r-- 1 glaucon glaucon 18797973 May 23 17:49 stpyv8-ubuntu-20.04-python-3.9.zip (venv) glaucon@rome:/tmp/stpyv8$ unzip stpyv8-ubuntu-20.04-python-3.9.zip Archive: stpyv8-ubuntu-20.04-python-3.9.zip inflating: stpyv8-ubuntu-20.04-3.9/icudtl.dat inflating: stpyv8-ubuntu-20.04-3.9/stpyv8-11.3.244.11-cp39-cp39-linux_x86_64.whl (venv) glaucon@rome:/tmp/stpyv8$ cd stpyv8-ubuntu-20.04-3.9/ (venv) glaucon@rome:/tmp/stpyv8/stpyv8-ubuntu-20.04-3.9$ ll total 24384 drwxrwxr-x 2 glaucon glaucon 4096 May 23 17:50 ./ drwxrwxr-x 3 glaucon glaucon 4096 May 23 17:50 ../ -rw-r--r-- 1 glaucon glaucon 10542048 May 17 15:27 icudtl.dat -rw-r--r-- 1 glaucon glaucon 14416203 May 17 15:27 stpyv8-11.3.244.11-cp39-cp39-linux_x86_64.whl (venv) glaucon@rome:/tmp/stpyv8/stpyv8-ubuntu-20.04-3.9$ popd /usr/share ~/dev/orientation-stpyv8-sandbox/stpyv8 (venv) glaucon@rome:/usr/share$ cd stpyv8/ (venv) glaucon@rome:/usr/share/stpyv8$ sudo cp -v /tmp/stpyv8/stpyv8-ubuntu-20.04-3.9/icudtl.dat . '/tmp/stpyv8/stpyv8-ubuntu-20.04-3.9/icudtl.dat' -> './icudtl.dat' (venv) glaucon@rome:/usr/share/stpyv8$ ll total 10312 drwxr-xr-x 2 root root 4096 May 23 17:51 ./ drwxr-xr-x 277 root root 12288 May 23 17:46 ../ -rw-r--r-- 1 root root 10542048 May 23 17:51 icudtl.dat (venv) glaucon@rome:/usr/share/stpyv8$ popd ~/dev/orientation-stpyv8-sandbox/stpyv8 (venv) glaucon@rome:~/dev/orientation-stpyv8-sandbox/stpyv8$ sudo pip install --upgrade /tmp/stpyv8/stpyv8-ubuntu-20.04-3.9/stpyv8-11.3.244.11-cp39-cp39-linux_x86_64.whl Processing /tmp/stpyv8/stpyv8-ubuntu-20.04-3.9/stpyv8-11.3.244.11-cp39-cp39-linux_x86_64.whl Installing collected packages: stpyv8 Successfully installed stpyv8-11.3.244.11
使用测试
未激活venv时可正常导入
glaucon@rome:~/dev/orientation-stpyv8-sandbox$ python3 Python 3.9.16 (main, Dec 7 2022, 01:11:51) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import STPyV8 >>> exit()
激活venv时无法导入
glaucon@rome:~/dev/orientation-stpyv8-sandbox$ . ./venv/bin/activate (venv) glaucon@rome:~/dev/orientation-stpyv8-sandbox$ python Python 3.9.16 (main, Dec 7 2022, 01:11:51) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import STPyV8 Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'STPyV8' >>> exit() (venv) glaucon@rome:~/dev/orientation-stpyv8-sandbox$
解决方法
问题核心是你用sudo执行pip install——sudo会切换到root用户,此时root环境变量指向的是系统级pip,而非venv内的pip。按以下步骤修正:
确保venv处于激活状态:确认终端提示符前有
(venv)标识,若未激活,执行:. ./venv/bin/activate卸载系统环境中的STPyV8:
sudo pip uninstall stpyv8用venv内的pip安装Wheel包:不要加sudo,直接执行:
pip install --upgrade /tmp/stpyv8/stpyv8-ubuntu-20.04-3.9/stpyv8-11.3.244.11-cp39-cp39-linux_x86_64.whl验证icudtl.dat文件路径:STPyV8依赖该文件,若venv内导入提示找不到,将文件复制到venv的site-packages目录下的STPyV8文件夹中:
# 获取venv的site-packages路径 python -c "import site; print(site.getsitepackages()[0])" # 复制文件到对应目录 cp /tmp/stpyv8/stpyv8-ubuntu-20.04-3.9/icudtl.dat $(python -c "import site; print(site.getsitepackages()[0])")/STPyV8/
内容的提问来源于stack exchange,提问作者shearichard
相关产品推荐
相关产品推荐

