Не удается установить через 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$
Ответы
Ответ 1
Создайте свою виртуальную среду в пути без пробелов. Вот почему это происходит:
Когда вы создаете среду, она устанавливает каталог bin
. В этом каталоге bin
все исполняемые файлы, относящиеся к среде. Некоторые из них - скрипты. Как вы, возможно, знаете, hashbangs используются, чтобы сообщить системе, какой интерпретатор использовать для запуска script. Вы можете часто видеть это в верхней части скриптов:
#!/usr/bin/env python
Если script находится в /tmp/test.py
, который сообщает системе выполнить эту команду для выполнения script:
/usr/bin/env python /tmp/test.py
В вашем случае virtualenv создает скрипты, подобные этому:
#!/tmp/oh no/bin/python
Когда система попытается выполнить это, он попытается выполнить команду /tmp/oh
с аргументами no/bin/python
и /tmp/test.py
. /tmp/oh
не существует, поэтому он терпит неудачу.
Ответ 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
работал отлично, см. комментарий Alex ниже
Ответ 3
Команда pip
не будет работать, если:
- Вы не установили pip в своей системе. (сначала вы должны установить pip в своей системе, прежде чем использовать его в virtualenv. Чтобы установить
pip
в Ubuntu, используйте команду sudo apt-get install python-pip
или sudo apt-get install python3-pip
) - Путь к папке вашей виртуальной среды содержит пробелы (и). (Пример: /home/username/имя моей папки с пробелами /newvirtualenv)
- Путь к вашей папке виртуальной среды слишком длинный. Пример: /home/имя пользователя /mytoobigpath/somefolder/anotherfolder/someanotherfolder/someanotherfolderagain/myvirtualenv. (Попробуйте переименовать родительские папки с меньшими именами)
Если по какой-то причине вы не можете переименовать папки или изменить путь, yourvirtualenvfolder/bin
(с помощью команды cd
), а затем попробуйте ./python pip install packagename
.
Ответ 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.
Ответ 5
Я получил ту же ошибку в RedHat. Python 2.7.3 настроен и сделан сам.
[root @Ifx installer] # pip install Django
- bash:/usr/local/bin/pip:/usr/local/bin/python2.7: плохой интерпретатор: разрешение отклонено
В/usr/local/bin/pip замените первую строку #!/usr/local/bin/python2.7 на ваш фактический путь Python #!/root/installer/Python-2.7.5/python
Ответ 6
У меня была очень похожая проблема на моей машине 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.
Следующие шаги приводят меня к успеху:
- Убедитесь, что я использовал pip для установки virtualenv, и это последняя версия (pip-7.1.0). Результат: сбой.
- Установите win32api. Результат: сбой (хотя была некоторая ошибка в самом конце процесса установки).
- Попробуйте установить мой VE по пути без пробелов. Результат: сбой.
- Переустановите дистрибутив python Anaconda на путь, который не содержит скобки "[" и "]". У VE были пробелы на пути. Результат: сбой.
- Переустановите дистрибутив Anaconda python на путь, который также не содержит пробелов. В папке VE по-прежнему были пробелы. Результат: успех!
Так что, по крайней мере, простая установка Anaconda (python), путь, не связанный с пробелом, была ключевой.. Возможно, установка win32api также важна. Не уверен.
Ответ 7
Я нашел это из поиска 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
Ответ 8
В моем случае, деактивировать среду, и source bin/activate
снова работает.
Кажется, что содержимое моей папки имеет те же имена подпапок, что и с помощью virtualenv
, например bin, lib и т.д. И после копирования в мои файлы повторно активируйте среду, чтобы virtualenv
обновлял новую информацию.
Ответ 9
На Python 3.7 у меня не было проблем с этим, но когда мне пришлось использовать Python 3.6, у меня были проблемы. Самый простой обходной путь, который я нашел на Github, был такой:
Вместо:
pip install -r requirements.txt
Я использую:
python env/bin/pip install -r requirements.txt
Таким образом, вы на самом деле прямо указываете на файл pip в каталоге вашей виртуальной среды. Конечно, вам нужно активировать его, прежде чем пытаться это. Надеюсь, это поможет тому, кто придет сюда!