为什么 virtualenv 会显示所有已安装的软件包,而不会在 virtualenv 中安装模块?

Gri*_*e Z 5 pip virtualenv python-2.7 python-3.x virtual-environment

问题

我不知道为什么当 virtualenv 处于活动状态时, pip freeze 仍然显示所有模块,而它认为不显示。我究竟做错了什么?

在终端上

我尝试了两种方法来创建虚拟环境:

virtualenv my-virtualenv

virtualenv --no-site-packages my-virtualenv
Run Code Online (Sandbox Code Playgroud)

然后激活它

source my-virtualenv/bin/activate
Run Code Online (Sandbox Code Playgroud)

结果

两者都显示所有包(当他们认为不显示时)。运行命令pip freeze我得到:

(my-virtualenv)$ pip freeze

DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
actionlib==1.11.9
angles==1.9.11
bondpy==1.7.19
camera-calibration==1.12.20
camera-calibration-parsers==1.11.12
catkin==0.7.6
cv-bridge==1.12.4
diagnostic-analysis==1.9.2
diagnostic-common-diagnostics==1.9.2
diagnostic-updater==1.9.2
dynamic-reconfigure==1.5.48
gazebo-plugins==2.5.13
gazebo-ros==2.5.13
...
rosnode==1.12.7
rosparam==1.12.7
rospy==1.12.7
rosservice==1.12.7
rostest==1.12.7
rostopic==1.12.7
rosunit==1.13.5
roswtf==1.12.7
tf2-ros==0.5.16
topic-tools==1.12.7
xacro==1.11.2
Run Code Online (Sandbox Code Playgroud)

跑步

(my-virtualenv)$ which python
/home/user/.../my-virtualenv/bin/python

(my-virtualenv)$ python -V
Python 2.7.12
Run Code Online (Sandbox Code Playgroud)

(my-virtualenv)$ which python3
/usr/bin/python3

(my-virtualenv)$ python3 -V
Python 3.5.2

Run Code Online (Sandbox Code Playgroud)

因此,当 virtualenv 被激活时,我什至可以使用 python3,但它使用 pc 安装的模块。此外,新安装的软件包安装在电脑中,而不是 virtualenv 中,我无法在 vitualenv 中安装 python3,因为它已经“存在”(但在电脑中)。

小智 0

我遇到了同样的问题,这是因为不知何故,ROS 的 Python 配置正在生成它。

我解决了这个问题,从 ~/.bashrc 中删除 ROS 的源命令。例如:

source /opt/ros/melodic/setup.bash
source $HOME/ROS/aslam_ws/devel/setup.bash
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我意识到,在更改任何内容之前,从 PyCharm 创建环境也可以正常工作(当在终端中时我仍然遇到问题)。

一定有更好的解决方案,但我还没有找到。