Heroku 推送由于 pip/分发错误而被拒绝。解决方法是什么?



我的本地git/virtualenv使用的是pip 1.3.1版本。当我尝试将Python 3.3.2应用程序推送到Heroku时,我得到

Downloading/unpacking distribute==0.6.34 (from -r requirements.txt (line 5))
     Running setup.py egg_info for package distribute
       Traceback (most recent call last):
         File "<string>", line 3, in <module>
         File "./setuptools/__init__.py", line 2, in <module>
           from setuptools.extension import Extension, Library
         File "./setuptools/extension.py", line 5, in <module>
           from setuptools.dist import _get_unpatched
         File "./setuptools/dist.py", line 103
           except ValueError, e:
                            ^
       SyntaxError: invalid syntax
       Complete output from command python setup.py egg_info:
       Traceback (most recent call last):
     File "<string>", line 3, in <module>
     File "./setuptools/__init__.py", line 2, in <module>
       from setuptools.extension import Extension, Library
     File "./setuptools/extension.py", line 5, in <module>
       from setuptools.dist import _get_unpatched
     File "./setuptools/dist.py", line 103
       except ValueError, e:
                        ^
   SyntaxError: invalid syntax
   ----------------------------------------
   Command python setup.py egg_info failed with error code 1 in /tmp/pip-build-u58345/distribute
   Storing complete log in /app/.pip/pip.log
 !     Push rejected, failed to compile Python app

给定我不能手动安装distribute在Heroku的服务器上,我应该如何避免这个错误?

你看到的行为是pip本身的问题:https://github.com/pypa/pip/issues/650

似乎pip使用了distribute来升级distribute.

然而,你需要做的就是从requirements.txt中删除分发文件。它已经在那里了,因为它是由构建包安装的,所以不需要使用pip再次安装它。

我相信你实际上可以并且正在通过默认的构建包在heroku的服务器上安装distribution。Heroku的Python支持以构建包的形式实现。你可以在这里阅读更多关于构建包的信息。

如果你希望有一个特定版本的分发,在这种情况下没有pip-bug,你必须在你的应用程序正在使用的构建包中替换它的源代码。可以这样做:

  1. 在https://github.com/heroku/heroku-buildpack-python从heroku获取原始构建包
  2. 在您克隆的构建包中(在撰写本文时),您将找到/vendor/distribute-0.6.36。这就是问题所在。
  3. 在构建包的bin/compile脚本中,替换构建包使用的分发版本。在我的情况下,这是替换第31行DISTRIBUTE_VERSION="0.6.36"DISTRIBUTE_VERSION="0.6.45"

  4. 上传你的构建包到github并告诉heroku使用它

$ heroku config:set BUILDPACK_URL=https://github.com/you/name-of-buildpack-python-repo.git

或者

告诉heroku使用我的自定义构建包,而不是原来的。我的构建包与原始版本的唯一区别是步骤1-4中描述的那些。

覆盖现有应用程序的构建包:

$ heroku config:set BUILDPACK_URL=https://github.com/jhnwsk/heroku-buildpack-python.git

或者创建一个新的应用

$ heroku create myapp --buildpack https://github.com/jhnwsk/heroku-buildpack-python.git

当你在做了这些修改后把你的应用推送到Heroku时,你应该看到类似

的内容
-----> Fetching custom git buildpack... done
-----> Python app detected
-----> No runtime.txt provided; assuming python-2.7.4.
-----> Preparing Python runtime (python-2.7.4)
-----> Installing Distribute (0.6.45)
-----> Installing Pip (1.3.1)

相关内容

  • 没有找到相关文章

最新更新