安装尚未作为轮子的包装

许多纯 python 软件包在 Python Package Index 上还没有作为轮子提供,但仍然安装得很好。但是,Windows 上的某些软件包会给出可怕的 vcvarsall.bat 找不到错误。

问题是,你要安装的软件包中包含 C 或 C++的扩展,而不是目前可从 Python 包索引,预建轮 PyPI 中,而在 Windows 上,你不必建造所需的工具链这样的物品。

最简单的答案是去 Christoph Gohlke 的优秀网站,找到你需要的适当版本的库。通过适当的包名称 -cp NN - 必须匹配你的 python 版本,即如果你使用 Windows 32 位 python 甚至在 win64 ,名称必须包含 -win32- 并且如果使用 64 位 python 它必须包含 -win_amd64 - 然后 python 版本必须匹配,即对于 Python 34,文件名必须包含 -cp 34- 等。这基本上是 pip 在 pypi 网站上为你做的魔术。

或者,你需要为你正在使用的 python 版本获取适当的 Windows 开发工具包,你尝试构建接口的包的任何库的标头,可能是 python 版本的 python 标头等。

Python 2.7 使用 Visual Studio 2008,Python 3.3 和 3.4 使用 Visual Studio 2010,Python 3.5+使用 Visual Studio 2015。

然后,你*可能需要所需包链接到的任何库**的匹配修订版中*找到头文件,并将其下载到适当的位置。

最后你可以让 pip 做你的构建 - 当然如果软件包具有你还没有的依赖项,你也可能还需要找到它们的头文件。

替代方案: 在 pypi 或 Christop 的网站上也值得一看,你正在寻找的任何稍早版本的软件包可以是纯 python,也可以预先为你的平台和 python 版本构建,并可能使用它们,如果发现,直到你的包裹可用。同样,如果你使用的是最新版本的 python,你可能会发现需要一点时间才能让软件包维护人员赶上,以便真正需要的项目 一个特定的包,你可能不得不暂时使用稍微老一点的 python。你还可以检查软件包源站点以查看是否有预先构建的分叉版本或纯 python,并搜索提供你需要但可用的功能的备用软件包 - 一个让你想到的例子是Pillow积极维护,替代 PIL 目前未在 6 年内更新,不适用于 python 3

后记,我会鼓励任何有这个问题的人去包的 bug 跟踪器并添加,或者如果还没有,那么就提出一张票,礼貌地请求包维护者为你的具体提供一个 pypi 轮。平台和 python 的组合,如果这样做,那么通常事情会随着时间的推移变得更好,一些软件包维护者没有意识到他们错过了人们可能正在使用的给定组合。

有关安装预发行版的注意事项

Pip 遵循语义版本控制的规则,默认情况下优先于预发布版本发布。因此,如果一个给定的包已经发布为 V0.98 并且还有一个候选版本 V1.0-rc1pip install 的默认行为将是安装 V0.98 - 如果你想安装候选版本,建议你先在虚拟环境中进行测试,可以使用 --pip install --pre package-name--pip install --pre --upgrade package-name 启用。在许多情况下,预发布或发布候选版本可能没有为所有平台和版本组合构建的轮子,因此你更有可能遇到上述问题。

安装开发版本的注意事项

你也可以使用 pip 从 github 和其他位置安装软件包的开发版本,因为这样的代码不断变化,因此不太可能为它构建轮子,因此任何不纯的软件包都需要构建工具,并且它们可能存在在任何时候都要破坏,因此强烈建议用户仅在虚拟环境中安装此类软件包。

这种安装有三种选择:

  1. 下载压缩快照,大多数在线版本控制系统都可以选择下载代码的压缩快照。这可以手动下载,然后安装 pip install path / to / downloaded / file 注意,对于大多数压缩格式,pip 将处理解压缩到缓存区域等。
  2. 让 pip 为你处理下载和安装:pip install URL / of / package / repository - 你可能还需要使用 --trusted-host--client-cert 和/或 --proxy 标志才能正常工作,尤其是在企业环境中。例如:
    > py -3.5-32 -m venv demo-pip
    > demo-pip\Scripts\activate.bat
    > python -m pip install -U pip
    Collecting pip
      Using cached pip-9.0.1-py2.py3-none-any.whl
    Installing collected packages: pip
      Found existing installation: pip 8.1.1
        Uninstalling pip-8.1.1:
          Successfully uninstalled pip-8.1.1
    Successfully installed pip-9.0.1
    > pip install git+https://github.com/sphinx-doc/sphinx/
    Collecting git+https://github.com/sphinx-doc/sphinx/
      Cloning https://github.com/sphinx-doc/sphinx/ to c:\users\steve-~1\appdata\local\temp\pip-04yn9hpp-build
    Collecting six>=1.5 (from Sphinx==1.7.dev20170506)
      Using cached six-1.10.0-py2.py3-none-any.whl
    Collecting Jinja2>=2.3 (from Sphinx==1.7.dev20170506)
      Using cached Jinja2-2.9.6-py2.py3-none-any.whl
    Collecting Pygments>=2.0 (from Sphinx==1.7.dev20170506)
      Using cached Pygments-2.2.0-py2.py3-none-any.whl
    Collecting docutils>=0.11 (from Sphinx==1.7.dev20170506)
      Using cached docutils-0.13.1-py3-none-any.whl
    Collecting snowballstemmer>=1.1 (from Sphinx==1.7.dev20170506)
      Using cached snowballstemmer-1.2.1-py2.py3-none-any.whl
    Collecting babel!=2.0,>=1.3 (from Sphinx==1.7.dev20170506)
      Using cached Babel-2.4.0-py2.py3-none-any.whl
    Collecting alabaster<0.8,>=0.7 (from Sphinx==1.7.dev20170506)
      Using cached alabaster-0.7.10-py2.py3-none-any.whl
    Collecting imagesize (from Sphinx==1.7.dev20170506)
      Using cached imagesize-0.7.1-py2.py3-none-any.whl
    Collecting requests>=2.0.0 (from Sphinx==1.7.dev20170506)
      Using cached requests-2.13.0-py2.py3-none-any.whl
    Collecting typing (from Sphinx==1.7.dev20170506)
      Using cached typing-3.6.1.tar.gz
    Requirement already satisfied: setuptools in f:\toolbuild\temp\demo-pip\lib\site-packages (from Sphinx==1.7.dev20170506)
    Collecting sphinxcontrib-websupport (from Sphinx==1.7.dev20170506)
      Downloading sphinxcontrib_websupport-1.0.0-py2.py3-none-any.whl
    Collecting colorama>=0.3.5 (from Sphinx==1.7.dev20170506)
      Using cached colorama-0.3.9-py2.py3-none-any.whl
    Collecting MarkupSafe>=0.23 (from Jinja2>=2.3->Sphinx==1.7.dev20170506)
      Using cached MarkupSafe-1.0.tar.gz
    Collecting pytz>=0a (from babel!=2.0,>=1.3->Sphinx==1.7.dev20170506)
      Using cached pytz-2017.2-py2.py3-none-any.whl
    Collecting sqlalchemy>=0.9 (from sphinxcontrib-websupport->Sphinx==1.7.dev20170506)
      Downloading SQLAlchemy-1.1.9.tar.gz (5.2MB)
        100% |################################| 5.2MB 220kB/s
    Collecting whoosh>=2.0 (from sphinxcontrib-websupport->Sphinx==1.7.dev20170506)
      Downloading Whoosh-2.7.4-py2.py3-none-any.whl (468kB)
        100% |################################| 471kB 1.1MB/s
    Installing collected packages: six, MarkupSafe, Jinja2, Pygments, docutils, snowballstemmer, pytz, babel, alabaster, imagesize, requests, typing, sqlalchemy, whoosh, sphinxcontrib-websupport, colorama, Sphinx
      Running setup.py install for MarkupSafe ... done
      Running setup.py install for typing ... done
      Running setup.py install for sqlalchemy ... done
      Running setup.py install for Sphinx ... done
    Successfully installed Jinja2-2.9.6 MarkupSafe-1.0 Pygments-2.2.0 Sphinx-1.7.dev20170506 alabaster-0.7.10 babel-2.4.0 colorama-0.3.9 docutils-0.13.1 imagesize-0.7.1 pytz-2017.2 requests-2.13.0 six-1.10.0 snowballstemmer-1.2.1 sphinxcontrib-websupport-1.0.0 sqlalchemy-1.1.9 typing-3.6.1 whoosh-2.7.4

请注意 URL 的 git+前缀

  1. 使用 gitmercurial 或其他可接受的工具,克隆库*优选 DVCS 工具,*并使用 pip install 路径/到/复制/回购 -这将过程中的任何 requires.text 文件并执行构建和设置步骤,*可以手动改变目录到你的克隆存储库并运行 pip install -r requires.txt 然后 python setup.py install 以获得相同的效果。*这种方法的最大优点是,虽然初始克隆操作可能需要比快照下载更长的时间,但是在 git:git pull origin master 的情况下可以更新到最新版本,如果当前版本包含错误,你可以使用 pip uninstall package-name 然后使用 git checkout 命令将存储库历史记录移回早期版本并重新尝试。