我发现 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
明白这一 pip 。$ 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.
最佳答案
通常,使用 apt
升级使用系统包管理器(在本例中为 pip
)安装的包不是一个好主意。因为它们将不再受系统管理。pip
将安装到 /usr/local
.在您的 shell 中找不到您的命令的原因是 command hashing .您可以运行 hash -r
你就可以使用virtualenv ...
再次(来自 /usr/local/bin/virtualenv
)
原因apt
相信virtualenv
仍然安装是因为你没有用 apt
卸载它.通过 pip 升级不会更新 dpkg
元数据。您可以使用 grep 验证这一 pip :
# 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
关于python - 文件位置和用法 : apt-get install python-<pkg> vs. pip3 install <pkg>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43567007/