python3.6-venv перехватывает pip. как это предотвратить?

Я преследую сбой установки. У меня есть свежая установка Ubuntu Xenial. У меня есть несколько разных проектов, каждый из которых включает зависимости, требующие другой версии python, включая проект gnuradio, который, кажется, имеет разумное ожидание, что pip указывает на python2.7. Вот первая часть того, что я запустил:

$ sudo apt-get update
$ sudo apt-get -yq upgrade
$ sudo apt-get -yq install python-pip
$ sudo pip install --upgrade pip
$ sudo apt-get install -yq python3-pip
$ sudo pip3 install --upgrade pip
$ sudo apt-get update
$ sudo apt-get -yq upgrade
$ sudo apt-get -yq install python-dev python3-dev
$ sudo apt-get install --fix-missing python-apt
$ sudo pip install numpy scipy matplotlib pybombs virtualenv
$ sudo apt-get -yq install build-essential libffi-dev libssl-dev python3-setuptools
$ sudo pip3 install --upgrade setuptools wheel
$ sudo pip3 install numpy scipy matplotlib virtualenv
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get install python3.6
$ sudo apt-get -yq install python3.6-venv python3.6-dev
$ sudo apt-get update
$ sudo apt-get upgrade

Пока никаких жалоб, когда я проверяю pip и pip3, они указывают туда, куда я хочу, чтобы они указывали:

$ pip -V
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
$ pip3 --version
pip 9.0.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)

Теперь я создаю виртуальную среду для python3.6, вхожу в нее, там pip указывает на python3.6, как и ожидалось, я устанавливаю еще несколько пакетов, затем выхожу из виртуальной среды и вдруг pip указывает на python3.5

$ mkdir projvenv
$ python3.6 -m venv /home/username/projvenv/
$ source /home/tom/vertexprojvenv/bin/activate
(projvenv) $ pip -V
pip 9.0.1 from /home/tom/projvenv/lib/python3.6/site-packages (python 3.6)
(projvenv) $ pip install numpy scipy matplotlib
(projvenv) $ deactivate
$ pip -V
pip 9.0.1 from /usr/local/lib/python3.5/dist-packages (python 3.5)

Я просмотрел этот вопрос, который, похоже, касается исключительно проблемы анаконды, в то время как решение не применимо в моем случае. Это обсуждение более актуально и указывает на проблему с pip. Эта конкретная ошибка, по крайней мере, не совсем то, что происходит для меня, поскольку я могу обновить как pip, указывающий на python2.7, так и pip3, указывающий на python3.5, а захват pip не инициируется обновлением. Любая мудрость, пролитая на эту проблему, высоко ценится.

(редактировать)

$ which pip
/usr/local/bin/pip
$ head -1 `which pip`
#!/usr/bin/python3

person user100345    schedule 24.08.2017    source источник
comment
Не делай sudo pip ничего. Вероятно, это источник вашей проблемы.   -  person wim    schedule 25.08.2017
comment
Для отладки: покажите нам which pip, head -1 `which pip`.   -  person phd    schedule 25.08.2017
comment
@phd отредактировано, как было предложено.   -  person user100345    schedule 25.08.2017
comment
@wim Я где-то это читал и пробовал раньше. pip install --upgrade pip (без sudo) поместите pip 9.0.1 в /home/username/.local/(и так далее), в то время как pip -V все равно даст мне pip 8.1.1 из /usr/lib/python2. 7 / dist-пакеты   -  person user100345    schedule 25.08.2017
comment
Кажется, ты прав — что-то заменило шебанг. Восстановите его на #!/usr/bin/python2. Затем попробуйте еще раз — активируйте и деактивируйте venv. Изменится ли шебанг снова?   -  person phd    schedule 25.08.2017
comment
@phd извините, мое невежество превышает мой энтузиазм. Как восстановить #!/usr/bin/python2?   -  person user100345    schedule 25.08.2017
comment
С помощью текстового редактора, конечно. sudo vim /usr/local/bin/pip или любой другой редактор, который вы предпочитаете. Я предпочитаю вим.   -  person phd    schedule 25.08.2017
comment
@phd Дерп. pip теперь указывает на python2, и я больше не могу воспроизвести проблему. Моя проблема, кажется, исправлена, если вы сделаете это ответом, я приму его.   -  person user100345    schedule 25.08.2017


Ответы (1)


Восстановите строку shebang в /usr/local/bin/pip — сделайте ее #!/usr/bin/python2.

PS. Ну, формально это не полный ответ, потому что вопрос "Как предотвратить?" Я не знаю, какая программа изменила строку shebang; но я сомневаюсь, что это была виртуальная среда.

person phd    schedule 25.08.2017