我发现sudo apt-get install python-<pkg>
和sudo pip3 install <pkg>
在不同的地方安装文件。
有没有办法通过对用户透明的两个选项中的任何一个来渲染安装?
在我的特定情况下,它不是,见下文。由apt-get
安装的二进制文件已被pip3
删除,因此其用法不同。
副产品问题是:
顺序:1)apt-get install,2)pip --upgrade,第二步升级版本并更改文件位置。但apt-get
仍然认为它的原始版本位于原始位置。
如何解决这个问题?
我打算安装virtualenv
。
我刚刚完成了以下工作:
安装python-virtualenv
$ sudo apt-get install python-virtualenv
Reading package lists... Done
...
Setting up virtualenv (15.0.1+ds-3ubuntu1) ...
检查pip3
是否读取virtualenv
$ sudo pip3 install virtualenv
The directory '/home/santiago/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/santiago/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Requirement already satisfied: virtualenv in /usr/lib/python3/dist-packages
查找已安装的文件。这些内容位于/usr/lib/python3/dist-packages
,pip3
了解这一点。
$ ll /usr/lib/python3/dist-packages/virtualenv*
-rw-r--r-- 1 root root 100655 Nov 30 08:29 /usr/lib/python3/dist-packages/virtualenv.py
/usr/lib/python3/dist-packages/virtualenv-15.0.1.egg-info:
total 36
drwxr-xr-x 2 root root 4096 Apr 22 20:48 ./
drwxr-xr-x 146 root root 12288 Apr 22 20:48 ../
-rw-r--r-- 1 root root 1 Nov 30 08:29 dependency_links.txt
-rw-r--r-- 1 root root 48 Nov 30 08:29 entry_points.txt
-rw-r--r-- 1 root root 1 Nov 30 08:29 not-zip-safe
-rw-r--r-- 1 root root 3409 Nov 30 08:29 PKG-INFO
-rw-r--r-- 1 root root 11 Nov 30 08:29 top_level.txt
找到版本
$ virtualenv --version
15.0.1
使用virtualenv
$ virtualenv my_project
Running virtualenv with interpreter /usr/bin/python2
New python executable in /home/santiago/my_project/bin/python2
Also creating executable in /home/santiago/my_project/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
所以这很好用。 我现在所做的是:
升级到最新版本。这必须使用pip
完成,因为apt-get
安装了最新的可用版本。
$ sudo pip3 install --upgrade virtualenv
[sudo] password for santiago:
The directory '/home/santiago/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/santiago/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting virtualenv
Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)
100% |████████████████████████████████| 1.8MB 781kB/s
Installing collected packages: virtualenv
Found existing installation: virtualenv 15.0.1
Uninstalling virtualenv-15.0.1:
Successfully uninstalled virtualenv-15.0.1
Successfully installed virtualenv-15.1.0
尝试使用virtualenv
$ virtualenv -p python3 my_project
bash: /usr/bin/virtualenv: No such file or directory
查找已安装的文件。 apt-get
安装的文件已消失。
$ ll /usr/lib/python3/dist-packages/virtualenv*
ls: cannot access '/usr/lib/python3/dist-packages/virtualenv*': No such file or directory
$ ll /usr/bin/virtualenv
ll /usr/bin/virtualenv
尝试恢复apt-get
提供的内容。
$ sudo apt-get install python-virtualenv
Reading package lists... Done
Building dependency tree
Reading state information... Done
python-virtualenv is already the newest version (15.0.1+ds-3ubuntu1).
The following packages were automatically installed and are no longer required:
linux-headers-4.4.0-64 linux-headers-4.4.0-64-generic linux-image-4.4.0-64-generic linux-image-extra-4.4.0-64-generic
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 174 not upgraded.
答案 0 :(得分:1)
通常,使用apt
升级系统包管理器(在本例中为pip
)安装的软件包并不是一个好主意,因为它们将不再由系统管理。
pip
将安装到/usr/local
。在shell中找不到命令的原因归因于command hashing。您可以运行hash -r
,然后您就可以再次使用virtualenv ...
(来自/usr/local/bin/virtualenv
)
apt
认为仍然安装了virtualenv
的原因是因为您没有使用apt
卸载它。通过pip升级不会更新dpkg
元数据。您可以使用grep:
# Note: I'm using xenial, if you're on something ealier the package will
# just be called `python-virtualenv` or `python3-virtualenv`
$ grep -C1 '^Package: virtualenv$' /var/lib/dpkg/status
Package: virtualenv
Status: install ok installed
$ grep -C1 '^Package: python3-virtualenv$' /var/lib/dpkg/status
Package: python3-virtualenv
Status: install ok installed