在 debian 10 上为 python2.7 安装 virtualenv

mul*_*sen 3 debian python pip virtualenv

我想python2.7virtualenv. 我最近从 debian 8 升级到 debian 10。我最初有python2.7pip安装在 debian 8 上,但可能在安装过​​程中发生了一些事情,现在我没有pip. 但我仍然python2.7安装了:

$ python --version
Python 2.7.16
Run Code Online (Sandbox Code Playgroud)

所以我只是pip像这样安装:

$ cd /tmp
$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
Run Code Online (Sandbox Code Playgroud)

现在我可以看到我安装了 pip:

$ which pip
/home/me/.local/bin/pip
$ pip --version
pip 20.0.2 from /home/me/.local/lib/python2.7/site-packages/pip (python 2.7)
Run Code Online (Sandbox Code Playgroud)

首先,这是应该安装pip的地方吗?在我的主目录下?我是这台电脑上的唯一用户,但我不确定是否pip应该在/usr/share/更公开的地方或其他地方让它正常工作?我应该习惯sudo python /tmp/get-pip.py安装pip吗?我不打算以 root 身份运行 python,但apt安装总是需要 root,所以也许安装也pip应该有?文档没有具体说明。

无论如何,接下来我尝试更新pip到最新版本并安装virtualenv

$ pip install -U pip
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Defaulting to user installation because normal site-packages is not writeable
Requirement already up-to-date: pip in ./.local/lib/python2.7/site-packages (20.0.2)

$ pip install virtualenv
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: virtualenv in ./.local/lib/python2.7/site-packages (15.1.0)
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好。但是当我尝试检查virtualenv我拥有的版本时,它失败了:

$ virtualenv --version
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 6, in <module>
    from virtualenv.__main__ import run_with_catch
ImportError: No module named __main__
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用virtualenv它总是会抛出这些错误。

所以总的来说,我的问题是如何正确安装python2.7pip以及virtualenv在 debian 10 上。如果需要的话,我不介意卸载所有内容并重新开始。


正如斯蒂芬基特在下面的答案中所指示的那样,我尝试卸载我之前安装的pip和的版本,但是这会产生一些新的错误。我将准确地解释我所做的......virtualenvget-pip.py

首先卸载virtualenv

$ pip uninstall virtualenv
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Found existing installation: virtualenv 15.1.0
Uninstalling virtualenv-15.1.0:
  Would remove:
    /home/me/.local/bin/virtualenv
    /home/me/.local/lib/python2.7/site-packages/virtualenv-15.1.0.dist-info/*
    /home/me/.local/lib/python2.7/site-packages/virtualenv.py
    /home/me/.local/lib/python2.7/site-packages/virtualenv_support/*
Proceed (y/n)? y
  Successfully uninstalled virtualenv-15.1.0
Run Code Online (Sandbox Code Playgroud)

看起来不错。然后卸载pip:

$ python -m pip uninstall pip
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Found existing installation: pip 20.0.2
Uninstalling pip-20.0.2:
  Would remove:
    /home/me/.local/bin/pip
    /home/me/.local/bin/pip2
    /home/me/.local/bin/pip2.7
    /home/me/.local/lib/python2.7/site-packages/pip-20.0.2.dist-info/*
    /home/me/.local/lib/python2.7/site-packages/pip/*
Proceed (y/n)? y
  Successfully uninstalled pip-20.0.2

$ pip --version
bash: /home/me/.local/bin/pip: No such file or directory
$ ls -a ~/.local/bin
.  ..  chardetect  easy_install  easy_install-2.7  flake8  pew  pipenv  pycodestyle  pyflakes  virtualenv-clone
Run Code Online (Sandbox Code Playgroud)

这似乎也不错。我不确定 bash 是如何知道pip应该是这样的,/home/me/.local/bin/pip因为该文件不存在。也许 bash 有缓存?无论如何,接下来的安装pipvirtualenv从debian回购10:

$ sudo apt install python-pip virtualenv
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  python3-distutils python3-lib2to3 python3-virtualenv
The following NEW packages will be installed:
  python-pip python3-distutils python3-lib2to3 python3-virtualenv virtualenv
Run Code Online (Sandbox Code Playgroud)

但是当我尝试检查virtualenv我现在拥有的版本时,它失败了:

$ virtualenv --version
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 6, in <module>
    from virtualenv.__main__ import run_with_catch
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/__init__.py", line 3, in <module>
    from .run import cli_run
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/run/__init__.py", line 6, in <module>
    from virtualenv.run.app_data import AppDataAction
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/run/app_data.py", line 8, in <module>
    from virtualenv.util.lock import ReentrantFileLock
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/util/lock.py", line 11, in <module>
    from virtualenv.util.path import Path
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/util/path/__init__.py", line 3, in <module>
    from ._pathlib import Path
  File "/usr/local/lib/python2.7/dist-packages/virtualenv/util/path/_pathlib/__init__.py", line 42, in <module>
    from pathlib2 import Path
ImportError: No module named pathlib2
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 7

为了避免在 virtualenvs之外搞砸,我建议使用打包版本:

sudo apt install python-pip virtualenv
Run Code Online (Sandbox Code Playgroud)

(以及python3-pipPython 3 支持,如果合适的话)。

您可能需要删除主目录中安装的pip和的版本,以及外部.virtualenvPATH/usr/bin

在设置 virtualenvs 时,您可以指定 Python 2.7:

virtualenv -p /usr/bin/python2.7 ...
Run Code Online (Sandbox Code Playgroud)

并且virtualenv会做正确的事。