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

#python #pip

#python #pip

Вопрос:

Ниже приведена ошибка, которую я получаю при запуске 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$ 
 

Ответ №1:

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

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

 #!/usr/bin/env python
 

Если скрипт находится в состоянии at /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 не существует, поэтому он завершается с ошибкой.

Комментарии:

1. «Создайте свою среду virtualenv в пределах пути без пробелов». Вот что помогло! Спасибо.

2. У меня была та же ошибка, но без пробелов, оказывается, меня поразило то, что вы не можете переместить virtualenv после создания (что является полным безумием …).

3. @alper: это как бы поддерживает их перемещение.

4. Спасибо, это все объяснило мне! Я предполагаю, что это означает, что вы не можете настроить virtualenvs внутри папки Google Drive.

5. @GChorn: это было бы немного взломом, но вы могли бы установить символическую ссылку в пути без пробелов к папке Google Drive.

Ответ №2:

Для тех, кто столкнулся с этой проблемой, я обнаружил, что длина пути также может вызвать проблемы без использования каких-либо пробелов (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
 

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

Комментарии:

1. Это не ограничение bash и фактически не имеет ничего общего с оболочками: это ограничение ядра в вызове exec на длину, разрешенную для указания интерпретатора (и аргументов) после магического числа «#!». Исторически это было около 30 символов в старом Unixen, в Linux это ближе к 80.

2. 🙂 Теперь, если мы можем просто заставить людей перестать указывать .sh в именах команд. Это ооочень неправильно по многим причинам.

3. Просто чтобы уточнить, ограничение ядра — BINPRM_BUF_SIZE, а предельная длина — 127 байт. Дополнительная информация: in-ulm.de /~маскировка/различная/шебанг/#длина

Ответ №3:

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

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

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

Комментарии:

1. Ты герой. Это немного смешно, что pip не может обрабатывать пробелы и специально не выдает эту ошибку.

2. Столкнулся с проблемой длинного пути. Спасибо.

3. Кто-нибудь знает virtualenv ограничение по длине?

4. Также столкнулся с ограничением длины из-за имен рабочих областей Дженкинса. Ограничение на количество символов, по-видимому, составляло 79 символов. CentOS7 размещенная на AWS виртуальная машина с ядром версии 3.10.0-693.11.6.el7.x86_64

5. Я должен заменить python pip install packagename на ./python pip install packagename , иначе в конечном итоге будет использоваться системный python, а не тот, что в virtualenv. Я не могу отредактировать ответ, потому что редактирование составляет менее 6 символов.

Ответ №4:

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.

Комментарии:

1. @icktoofay, virtualenv изменяет PATH определенное env значение . Таким образом, /usr/bin/env python будет ссылаться на python определенный virtualenv.

2. Вы правы. Сейчас это кажется очевидным, но я по какой-то причине упустил это из виду.

3. Не беспокойся. Я изменил свой ответ, чтобы сделать его более понятным.

4. Спасибо! Где-то в процессе настройки проекта мне сказали изменить имена папок, но я уже создал virtualenv. Теперь он больше не позволял мне использовать pip для установки пакетов. Редактирование исполняемого файла bin / pip и исправление пути к новому имени сделали свое дело! 🙂

Ответ №5:

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

Вместо:

 pip install -r requirements.txt
 

Я использую:

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

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

Комментарии:

1. Я не знаю, почему это работает, но это единственное решение, которое сработало для меня. Спасибо!

Ответ №6:

Я получил ту же ошибку 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

Ответ №7:

У меня была очень похожая проблема на моем компьютере с Windows 7, и я пару дней боролся с этим. В обоих путях, к моему дистрибутиву python и к моим ПЯТИ, были пробелы. За пару месяцев до этого все работало нормально. Я нашел следующую заметку на веб-сайте 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. Попробуйте установить my VE в путь без пробелов. Результат: сбой.
  4. Переустановите мой дистрибутив Anaconda python на путь, который не содержит скобок «[» и «]». В пути были пробелы. Результат: сбой.
  5. Переустановите мой дистрибутив Anaconda python на путь, который также не содержит пробелов. Путь к папке VE по-прежнему содержал пробелы. Результат: успех!

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

Ответ №8:

Я нашел это из поиска 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
 

Комментарии:

1. Это не решает проблему для меня

Ответ №9:

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

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

Ответ №10:

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

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

Комментарии:

1. Ошибка ясно показывает, что это связано с ошибкой в hashbang (она была устранена). Пожалуйста, внимательно прочитайте, прежде чем публиковать быстрый ответ.