win 8.1 cygwin - pip 正在安装到 windows python 目录中?

win 8.1 cygwin - pip is installing into windows python directory?

我最近刚开始涉足 运行 cygwin on windows。

正在尝试设置开发环境,并注意到一些异常情况。 因此,例如,我已经安装了 virtualenvwrapper,但是当我打开一个新的 cygwin 终端时,我得到了(在我的 .bashrc 中设置了适当的行之后)

-bash: /usr/local/bin/virtualenvwrapper.sh: No such file or directory

所以我尝试使用 pip 重新安装 virtualenvwrapper,我得到了

$ pip install virtualenvwrapper
Requirement already satisfied (use --upgrade to upgrade): virtualenvwrapper in c:\python27\lib\site-packages
Requirement already satisfied (use --upgrade to upgrade): virtualenv in c:\python27\lib\site-packages (from virtualenvwrapper)
Requirement already satisfied (use --upgrade to upgrade): virtualenv-clone in c:\python27\lib\site-packages (from virtualenvwrapper)
Requirement already satisfied (use --upgrade to upgrade): stevedore in c:\python27\lib\site-packages (from virtualenvwrapper)
Requirement already satisfied (use --upgrade to upgrade): argparse in c:\python27\lib\site-packages (from stevedore->virtualenvwrapper)
Requirement already satisfied (use --upgrade to upgrade): six>=1.9.0 in c:\python27\lib\site-packages (from stevedore->virtualenvwrapper)
Requirement already satisfied (use --upgrade to upgrade): pbr!=0.7,<1.0,>=0.6 in c:\python27\lib\site-packages (from stevedore->virtualenvwrapper)
Requirement already satisfied (use --upgrade to upgrade): pip in c:\python27\lib\site-packages (from pbr!=0.7,<1.0,>=0.6->stevedore->virtualenvwrapper)

什么给了?为什么要把它安装到 windows 目录?果然我可以看到 virtualenvwrapper 没有安装在 c:/cygwin64/lib/Python2.7/site-packages/ 事实上,该目录是完全裸露的。 我希望看到我安装的 pip 的更新版本。它当然在 windows 目录中。

我之前在 windows 上通过 pip 安装了 virtualenvwrapper,但我的理解是 windows 环境和 cygwin 终端是完全独立的,不应该知道每个其他(?)

如您所料,这也会对其他软件包造成严重破坏。 例如尝试安装 uwsgi 我得到这个错误:

Collecting uWSGI==2.0.7 (from -r _pip/requirements.txt (line 52))
  Downloading uwsgi-2.0.7.tar.gz (772kB)
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 20, in <module>
      File "c:\cygwin64\tmp\pip-build-n5cvur\uWSGI\setup.py", line 3, in <module>
        import uwsgiconfig as uc
      File "uwsgiconfig.py", line 8, in <module>
        uwsgi_os = os.uname()[0]
    AttributeError: 'module' object has no attribute 'uname'

    ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in c:\cygwin64\tmp\pip-build-n5cvur\uWSGI

我的理解是因为 os.uname 在 windows 上不存在。为什么 pip 安装程序 运行 使用 windows python 设置?

--------更新------
我想我找到了根本原因

$ which pip
/c/Python27/Scripts/pip

所以我的问题是: 为什么 pip 默认是 windows?或者这是怎么发生的?

-------- 更新 2 ----------
我刚刚发现 cygwin 中的默认 PATH env 变量附加了 windows 一个。果然 windows pip 的路径就在那里。

$ echo $PATH

这是预期的吗?如果是这样,为什么这是可取的?它不会增加像这样的无意冲突的机会吗?

所以我就把它留在这里作为对像我这样的 n00bs 的警告。

cygwin 将 windows 路径附加到 cygwin 终端 PATH 环境变量。

如果你已经在 windows 上安装了 pip 并且它在你的路径上,它会工作但会产生如上所示的意外结果。

检查确保你做到了

which python
which pip

确认你是什么版本运行。

只有 python 2.7.9 及更高版本默认包含 pip,并且 cygwin 中包含的包还不存在。所以你很可能需要手动安装 pip

如果你打开了一个 cygwin 终端,你需要关闭所有 windows 否则它会记住 windows pip 的路径。

在 cygwin 的 python 安装中查看设置 easy_install 的答案。

https://serverfault.com/questions/7282/how-to-run-easy-install-in-cygwin

完成后,您可以使用 easy_install 获取 pip。