python-由于pip / distribute错误,Heroku推送被拒绝.解决方法是什么?

我本地的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

鉴于我无法在Heroku的服务器上手动安装分发,我应该如何避免该错误?

解决方法:

您看到的行为与pip本身有关:
https://github.com/pypa/pip/issues/650

似乎pip使用分发来升级分发.

但是,解决错误所需要做的就是完全从requirements.txt中删除分发.它已经存在,因为它是由buildpack安装的,不需要使用pip再次安装.

我相信您实际上可以通过默认的buildpack在heroku的服务器上安装分发. Heroku的Python支持以buildpack的形式实现.您可以阅读有关buildpacks here的更多信息.

如果您希望拥有特定版本的分发版(在这种情况下,该版本没有pip-bug),则必须在应用程序正在使用的buildpack中替换其源代码.可以这样完成:

>在https://github.com/heroku/heroku-buildpack-python上从heroku获取原始buildpack
>在您克隆的buildpack中(在撰写本文时),您将找到/vendor/distribute-0.6.36.这就是问题.将其替换为a newer version of distribute.
>在buildpack的bin / compile脚本中,替换buildpack正在使用的分发版本.在我的情况下,这是replacing line 31 DISTRIBUTE_VERSION =“ 0.6.36”,其中DISTRIBUTE_VERSION =“ 0.6.45”
>将您的buildpack上载到github,然后说出要告诉heroku使用它

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

交替地

告诉heroku使用我的自定义buildpack而不是原始版本.我的builbpack与原始bu唯一的区别在于步骤1-4中所述的区别.

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

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

或者如果您正在创建一个新的应用程序

$heroku创建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)

这意味着您正在运行自定义分发版本.

上一篇:Heroku上的Python-发送给后台工作者


下一篇:javascript-如何在NodeJS应用的服务器端评估Ruby?