Не могу установить через pip с Virtualenv

Ниже приведена ошибка, которую я получаю при запуске pip:

serkan$ rm -r mysite
serkan$ pwd
/Users/serkan/Desktop/Python Folder
serkan$ virtualenv mysite 
New python executable in mysite/bin/python
Installing setuptools............done.
Installing pip...............done.
serkan$ source mysite/bin/activate
(mysite)serkan$ pip install pinax
-bash: /Users/serkan/Desktop/Python Folder/mysite/bin/pip: "/Users/serkan/Desktop/Python: bad interpreter: No such file or directory
(mysite)serkan$ python pip install pinax
python: can't open file 'pip': [Errno 2] No such file or directory
(mysite)serkan$ python pip install Pinax
python: can't open file 'pip': [Errno 2] No such file or directory
(mysite)serkan$ python pip install Pinax
python: can't open file 'pip': [Errno 2] No such file or directory
(mysite)serkan$ python pip install Pinax
python: can't open file 'pip': [Errno 2] No such file or directory
(mysite)serkan$ python pip 
python: can't open file 'pip': [Errno 2] No such file or directory
(mysite)serkan$ pip
-bash: /Users/serkan/Desktop/Python Folder/mysite/bin/pip: "/Users/serkan/Desktop/Python: bad interpreter: No such file or directory
(mysite)serkan$ pip install Pinax
-bash: /Users/serkan/Desktop/Python Folder/mysite/bin/pip: "/Users/serkan/Desktop/Python: bad interpreter: No such file or directory
(mysite)serkan$ 

person shaytac    schedule 27.10.2011    source источник


Ответы (10)


Создайте свою среду virtualenv по пути без пробелов. Вот почему это происходит:

Когда вы создаете среду, она устанавливает каталог bin. В этом каталоге bin находятся все исполняемые файлы, относящиеся к среде. Некоторые из них являются скриптами. Как вы, возможно, знаете, хеш-банги используются, чтобы сообщить системе, какой интерпретатор использовать для запуска скрипта. Вы можете часто видеть это в верхней части скриптов:

#!/usr/bin/env python

Если сценарий находится в /tmp/test.py, это говорит системе запустить эту команду для выполнения сценария:

/usr/bin/env python /tmp/test.py

В вашем случае virtualenv создает такие сценарии:

#!/tmp/oh no/bin/python

Когда система попытается выполнить это, она попытается выполнить команду /tmp/oh с аргументами no/bin/python и /tmp/test.py. /tmp/oh не существует, поэтому он не работает.

person icktoofay    schedule 27.10.2011
comment
О, так в этом случае проблема была в названии папки Python Folder? - person shaytac; 27.10.2011
comment
@ user74283: Да; Папка Python была проблемой. - person icktoofay; 27.10.2011
comment
Создайте свою среду virtualenv по пути без пробелов. Вот что помогло! Спасибо. - person KMS; 11.02.2012
comment
У меня была та же ошибка, но без пробелов, оказывается, что меня немного в том, что вы не можете перемещать однажды созданный virtualenv (что является полным безумием…). - person Alper; 25.06.2012
comment
@alper: это своего рода поддерживает их перемещение . - person icktoofay; 30.06.2012
comment
Спасибо, это все объяснило для меня! Я предполагаю, что это означает, что вы не можете настроить virtualenvs в папке Google Диска. - person GChorn; 08.03.2013
comment
@GChorn: это было бы немного хаком, но вы могли бы установить символическую ссылку в пути без пробелов к папке Google Диска. - person icktoofay; 09.03.2013
comment
@icktoofay, спасибо за предложение. Это небольшой хак, поэтому я могу использовать его для удобства автоматического резервного копирования моих проектов. - person GChorn; 12.03.2013
comment
Символическая ссылка @GChorn не работала с iCloud (/Мобильные документы/) :( - person Paul; 26.01.2017
comment
Я получаю ту же ошибку, но у меня нет пробелов на моем пути, и я не перемещал файл venv. Изменить: исправлено в соответствии с ответом @Hedde van der Heide, сокращая путь к venv. Это было очень долго. - person user5359531; 27.02.2017
comment
В моем случае путь, который содержал виртуальную среду, содержал пробелы, поэтому я исправил переименование папки, в имени которой были пробелы. - person lerp90; 28.06.2017
comment
Создайте свою среду virtualenv по пути без пробелов. Объяснение очень тривиального, но важного момента... Я бы никогда не беспокоился о том, чтобы проверить, было ли это пробелом в пути. Сэкономил мне столько времени и нервов... - person Jayant Shelke; 02.03.2018

Для тех, кто сталкивается с этой проблемой, я обнаружил, что длина пути также может вызывать проблемы без использования пробелов (Ubuntu 12.04):

virtualenv /home/user/some/very/longer/path/without/spaces/etc/venv

не удалось, пока

virtualenv /home/user/some/very/long/path/without/spaces/etc/venv

работал отлично, см. комментарий Алекса ниже

person Hedde van der Heide    schedule 04.06.2015
comment
Это не ограничение bash и на самом деле не имеет ничего общего с оболочками: это ограничение ядра в вызове exec на длину, разрешенную для указания интерпретатора (и аргументов) после #! магическое число. Исторически в старых Unixen было около 30 символов, в Linux — ближе к 80. - person Alex North-Keys; 06.01.2016
comment
:-) Теперь, если мы можем просто заставить людей прекратить использовать .sh в именах команд. Это так неправильно по многим причинам. - person Alex North-Keys; 06.01.2016
comment
Просто чтобы уточнить, ограничение ядра — BINPRM_BUF_SIZE, а предельная длина — 127 байт. Дополнительная информация: in-ulm.de/~mascheck/various/shebang/ #длина - person Flat; 22.05.2017

Команда pip не будет работать, если:

  • В вашей системе не установлен pip. (вам необходимо сначала установить pip в вашей системе, прежде чем вы сможете использовать его в virtualenv. Чтобы установить pip в Ubuntu, используйте команду sudo apt-get install python-pip или sudo apt-get install python3-pip)
  • Путь к папке виртуальной среды содержит пробелы.(Пример: /home/username/имя моей папки с пробелами/newvirtualenv)
  • Путь к папке виртуальной среды слишком длинный. Пример: /home/username/mytoobigpath/somefolder/anotherfolder/someanotherfolder/someanotherfolderagain/myvirtualenv. (Попробуйте переименовать родительские папки с помощью маленькие имена)

Если по какой-либо причине вы не можете переименовать папки или изменить путь, перейдите к yourvirtualenvfolder/bin (используя команду cd), а затем попробуйте ./python pip install packagename.

person Mohammed Shareef C    schedule 28.12.2016
comment
Ты герой. Это смешно, что pip не может обрабатывать пробелы И специально не выдает эту ошибку. - person ProGirlXOXO; 08.07.2017
comment
Столкнулся с проблемой длинного пути. Спасибо. - person Igal Karlinsky; 05.02.2018
comment
Кто-нибудь знает предел длины virtualenv? - person Greg Hilston; 07.04.2018
comment
Также столкнулся с ограничением длины из-за имен рабочих областей Jenkins. Лимит символов, казалось, составлял 79 символов. Виртуальная машина CentOS7, размещенная на AWS, с версией ядра 3.10.0-693.11.6.el7.x86_64. - person Connor; 06.06.2018
comment
Я должен заменить python pip install packagename на ./python pip install packagename, иначе он будет использовать системный python, а не тот, что в virtualenv. Я не могу отредактировать ответ, потому что редактирование меньше 6 символов. - person kkpattern; 12.06.2019
comment
@kkpattern Если я правильно понял, это тот случай, когда вы не можете изменить или переименовать папку virtualenv. я отредактировал ответ - person Mohammed Shareef C; 13.06.2019

icktoofay прав насчет причины.

Чтобы использовать pip с virtualenv в каталоге с пробелами, отредактируйте /path/to/env/bin/pip, заменив shebang вверху на #!/usr/bin/env python (или #!/usr/bin/env pypy, если вы используете pypy).

Обратите внимание, что virtualenv изменяет вашу среду таким образом, что /usr/bin/env python относится к python, определенному в virtualenv.

person Bryan Head    schedule 04.12.2013
comment
@icktoofay, virtualenv изменяет PATH, определенный env. Таким образом, /usr/bin/env python будет ссылаться на python, определенный в virtualenv. - person Bryan Head; 01.03.2014
comment
Ты прав. Сейчас это кажется очевидным, но я почему-то пропустил это. - person icktoofay; 01.03.2014
comment
Не беспокойся. Я изменил свой ответ, чтобы сделать его более понятным. - person Bryan Head; 01.03.2014
comment
Спасибо! Где-то в процессе настройки проекта мне сказали изменить имена папок, но я уже создал файл virtualenv. Теперь мне больше не разрешалось использовать pip для установки пакетов. Редактирование исполняемого файла bin/pip и исправление пути к новому имени сделали свое дело! :) - person Luca Bezerra; 01.12.2016

В Python 3.7 у меня не было никаких проблем с этим, но когда мне пришлось использовать Python 3.6, у меня возникла проблема. Самый простой обходной путь, который я нашел на Github, был следующим:

Вместо:

pip install -r requirements.txt

Я использую:

python env/bin/pip install -r requirements.txt

Таким образом, вы фактически напрямую указываете на файл pip в каталоге вашей виртуальной среды. Конечно, вам нужно сначала активировать его, прежде чем пытаться это сделать. Надеюсь, это поможет кому-то, кто приходит сюда!

person Bob de Graaf    schedule 12.11.2018
comment
Я не знаю, почему это работает, но это единственное решение, которое сработало для меня. Спасибо! - person Stav Shamir; 14.05.2020

У меня такая же ошибка в RedHat. Python 2.7.3 настроен и сделан мной.

[root@Ifx installer]# pip install Django
-bash: /usr/local/bin/pip: /usr/local/bin/python2.7: bad interpreter: Permission denied

Решение. В /usr/local/bin/pip замените первую строку #!/usr/local/bin/python2.7 на фактический путь Python #!/root/installer/Python-2.7.5/python.

person JackChen255    schedule 22.05.2014

У меня была очень похожая проблема на моем компьютере с Windows 7, и я несколько дней боролся с ней. Оба пути, к моему дистрибутиву Python и к моей VE были пробелы. За пару месяцев до этого работал нормально. Я нашел следующую заметку на сайте virtualenv:

**Windows Notes**
[...] To create a virtualenv under a path with spaces in it on Windows, you’ll need the win32api library installed.

Следующие шаги ведут меня к успеху:

  1. Убедитесь, что я использовал pip для установки virtualenv и это последняя версия (pip-7.1.0). Результат: сбой.
  2. Установите Win32API. Результат: сбой (хотя в самом конце процесса установки произошла ошибка).
  3. Попробуйте установить мой VE по пути без пробелов. Результат: сбой.
  4. Переустановите мой дистрибутив Anaconda Python по пути, который не содержит скобок «[» и «]». В VE были пробелы в пути. Результат: сбой.
  5. Переустановите мой дистрибутив Anaconda Python по пути, который также не содержит пробелов. В папке VE все еще были пробелы в пути. Результат: успех!

Так что, по крайней мере, простая установка Anaconda (python), не загрязняющая пространство, имела решающее значение. Возможно, установка win32api тоже была важна. Точно сказать не могу.

person ellockie    schedule 13.08.2015

Я нашел это из поиска Google, столкнувшись с той же проблемой, и нашел это очень полезным. virtualenv теперь имеет флаг --relocatable, который перепишет команду shebang на #!/usr/bin/env <the_python_version_you_used_to_create_the_virtualenv>. Это связано с некоторыми оговорками, поэтому обязательно прочитайте документацию, чтобы понять последствия:

https://virtualenv.pypa.io/en/stable/userguide/#making-environments-relocatable

Вам нужно использовать тот же синтаксис для перемещения virtualenv, что и при его создании, иначе версия Python может быть перезаписана. Это будет работать, как ожидалось...

virtualenv --python=python3.5 env-test
virtualenv --relocatable --python=python3.5 env-test

тогда как это приведет к #!/usr/bin/env python2.7 (по крайней мере, в моей локальной среде)...

virtualenv --python==python3.5 env-test
virtualenv --relocatable env-test
person bob dob    schedule 06.04.2017
comment
Это не решает проблему для меня - person nicbou; 13.05.2017

В моем случае деактивируйте среду, и source bin/activate снова заработает.

Кажется, содержимое моей папки имеет те же имена подпапок, что и сгенерированные virtualenv, такие как bin, lib и т. д. И после копирования в мои файлы повторно активируйте среду, дайте virtualenv обновить новую информацию.

person Yushan ZHANG    schedule 13.09.2018

Если это в Windows, это может быть вызвано изменениями dll (другим программным обеспечением). Установка openSSL исправит это. https://slproweb.com/products/Win32OpenSSL.html

Он автоматически обновит dll до более новых версий.

person Logan3629    schedule 22.05.2021
comment
Ошибка ясно показывает, что это из-за ошибки в hashbang (она была решена). Пожалуйста, прочитайте внимательно, прежде чем публиковать быстрый ответ. - person richardev; 23.05.2021