无法通过Virtualenv与pip安装

sha*_*tac 62 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$ 
Run Code Online (Sandbox Code Playgroud)

ick*_*fay 124

在没有空格的路径中创建virtualenv环境.这就是它发生的原因:

创建环境时,它会设置bin目录.在该bin目录中是与环境相关的所有可执行文件.有些是脚本.您可能知道,hashbang用于告诉系统使用哪个解释器来运行脚本.您可能经常在脚本的顶部看到这个:

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

如果脚本处于/tmp/test.py,则告诉系统运行此命令以执行脚本:

/usr/bin/env python /tmp/test.py
Run Code Online (Sandbox Code Playgroud)

在你的情况下,virtualenv正在创建这样的脚本:

#!/tmp/oh no/bin/python
Run Code Online (Sandbox Code Playgroud)

当系统尝试执行该操作时,它将尝试/tmp/oh使用参数no/bin/python和执行命令/tmp/test.py./tmp/oh不存在,所以它失败了.

  • "在没有空格的路径中创建你的virtualenv环境." 这有什么帮助!谢谢. (10认同)
  • 我有同样的错误,但没有空格,结果我有点,你不能移动virtualenv一旦创建(这是完全疯狂......). (4认同)

Hed*_*ide 21

对于遇到这个问题的人,我发现路径的长度也可能导致问题,而不使用任何空格(Ubuntu 12.04):

virtualenv /home/user/some/very/longer/path/without/spaces/etc/venv
Run Code Online (Sandbox Code Playgroud)

失败了,而

virtualenv /home/user/some/very/long/path/without/spaces/etc/venv
Run Code Online (Sandbox Code Playgroud)

工作得很好,请参阅Alex的评论如下

  • 这不是bash约束,实际上与shell无关:它是exec调用中的内核约束,允许在"#!"之后指定解释器(和args).神奇的数字.从历史上看,在较旧的Unixen中大约有30个字符,在Linux中它接近80. (9认同)

Moh*_*f C 19

pip 命令将无法工作如果:

  • 您尚未在系统中安装pip.(你必须先在你的系统中安装pip才能在virtualenv中使用它.要pip在Ubuntu上安装,请使用命令sudo apt-get install python-pipsudo apt-get install python3-pip)
  • 虚拟环境文件夹的路径包含空格.(示例:/ home/username /我的文件夹名称包含spaces/newvirtualenv)
  • 虚拟环境文件夹的路径太长. 示例:/ home/username/mytoobigpath/somefolder/anotherfolder/someanotherfolder/someanotherfolderagain/myvirtualenv.(尝试重命名名称较小的父文件夹)

如果由于某种原因无法重命名文件夹或更改路径,请转到yourvirtualenvfolder/bin(使用cd命令)然后尝试./python pip install packagename.

  • 你是英雄.pip无法处理空间并且没有特别抛出该错误,这有点荒谬. (5认同)
  • 陷入漫长的道路问题.谢谢. (3认同)
  • 由于Jenkins工作空间名称,也遇到了长度限制.字符限制似乎是79个字符.CentOS7 AWS托管的VM,内核版本为3.10.0-693.11.6.el7.x86_64 (2认同)

Bry*_*ead 14

icktoofay关于原因是正确的.

要在带有空格的目录中使用带有virtualenv的pip,编辑/path/to/env/bin/pip,替换顶部的shebang #!/usr/bin/env python(或者#!/usr/bin/env pypy如果你使用的是pypy).

请注意,virtualenv会改变您的环境,以/usr/bin/env python引用pythonvirtualenv定义的环境.