在 debian 10 上安裝 python2.7 的 virtualenv

在 debian 10 上安裝 python2.7 的 virtualenv

我想python2.7與 一起使用virtualenv。我最近從 debian 8 升級到python2.7debian 10 pippip但我還是安裝了python2.7

$ python --version
Python 2.7.16

所以我只是pip這樣安裝:

$ cd /tmp
$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py

現在我可以看到我已經安裝了 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)

首先,這是應該安裝 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)

一切看起來都不錯。但是當我嘗試檢查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__

如果我嘗試使用virtualenv它總是會拋出這些錯誤。

總的來說,我的問題是如何在 debian 10 上正確安裝python2.7pipvirtualenv


按照指示史蒂芬·基特在下面的答案中,我嘗試卸載之前安裝的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

看起來不錯。然後卸載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

這似乎也不錯。我不確定 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

但是當我嘗試檢查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

答案1

為了避免把事情搞砸外部virtualenvs,我建議使用打包版本:

sudo apt install python-pip virtualenv

(如果適用的話,還有python3-pipPython 3 支援)。

您可能需要刪除主目錄中安裝的pip和版本,以及外部的任何其他版本。virtualenvPATH/usr/bin

設定 virtualenvs 時,您可以指定 Python 2.7:

virtualenv -p /usr/bin/python2.7 ...

virtualenv會做正確的事。

答案2

經進一步調查討論史蒂芬·基特我發現我virtualenv的電腦上有 2 個不同的版本:

$ find /usr/ -iname "virtualenv" | grep bin
/usr/local/bin/virtualenv
/usr/bin/virtualenv

當我運行它時,其中的一個/usr/bin/virtualenv不會拋出錯誤:

$ /usr/bin/virtualenv --version
15.1.0

透過一些網路搜索,我發現其中的一個/usr/local/bin/virtualenv必須以 root 身份安裝pip。所以我以piproot 身份卸載了它:

$ sudo pip uninstall virtualenv
Uninstalling virtualenv-20.0.13:
  Would remove:
    /usr/local/bin/virtualenv
    /usr/local/lib/python2.7/dist-packages/virtualenv-20.0.13.dist-info/*
    /usr/local/lib/python2.7/dist-packages/virtualenv/*
Proceed (y/n)? y
  Successfully uninstalled virtualenv-20.0.13

現在一切都很好:

$ which virtualenv
/usr/bin/virtualenv
$ find /usr/ -iname "virtualenv" | grep bin
/usr/bin/virtualenv

相關內容