我本地的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)
这意味着您正在运行自定义分发版本.