文件和用法的位置:apt-get install python- <pkg>与pip3安装<pkg>

时间:2017-04-23 03:17:32

标签: python ubuntu pip apt

我发现sudo apt-get install python-<pkg>sudo pip3 install <pkg> 在不同的地方安装文件。

有没有办法通过对用户透明的两个选项中的任何一个来渲染安装?

在我的特定情况下,它不是,见下文。由apt-get安装的二进制文件已被pip3删除,因此其用法不同。

副产品问题是:

顺序:1)apt-get install,2)pip --upgrade,第二步升级版本并更改文件位置。但apt-get仍然认为它的原始版本位于原始位置。 如何解决这个问题?

我打算安装virtualenv。 我刚刚完成了以下工作:

  1. 安装python-virtualenv

    $ sudo apt-get install python-virtualenv
    Reading package lists... Done
    ...
    Setting up virtualenv (15.0.1+ds-3ubuntu1) ...
    
  2. 检查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
    
  3. 查找已安装的文件。这些内容位于/usr/lib/python3/dist-packagespip3了解这一点。

    $ 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
    
  4. 找到版本

    $ virtualenv --version
    15.0.1
    
  5. 使用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.
    
  6. 所以这很好用。 我现在所做的是:

    1. 升级到最新版本。这必须使用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
      
    2. 尝试使用virtualenv

      $ virtualenv -p python3 my_project
      bash: /usr/bin/virtualenv: No such file or directory
      
    3. 查找已安装的文件。 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
      
    4. 尝试恢复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.
      

1 个答案:

答案 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