为什么heroku local:run想要使用全局python安装而不是当前激活的虚拟环境?

Ad *_*d N 18 python heroku virtualenv pythonpath

使用Heroku来部署我们的Django应用程序,除了heroku local:run命令之外,一切似乎都按规范工作.

我们经常需要通过Django的manage.py文件运行命令.在遥控器上运行它们,作为一次性dynos,完美无瑕地工作.要在本地运行它们,我们尝试:

heroku local:run python manage.py the_command
Run Code Online (Sandbox Code Playgroud)

尽管当前虚拟环境包含Django安装,但失败了

 ImportError: No module named django.core.management
Run Code Online (Sandbox Code Playgroud)

 通过python路径进行诊断

然后heroku local:run which python返回:

 /usr/local/bin/python
Run Code Online (Sandbox Code Playgroud)

which python回报:

 /Users/myusername/MyProject/venv/bin/python #the correct value
Run Code Online (Sandbox Code Playgroud)
  • 这是Heroku本地的一个错误:运行?或者我们是否错过了解其预期的行为?
  • 更重要的是:有没有办法heroku local:run使用当前安装的虚拟环境?

Ad *_*d N 11

在联系Heroku的支持后,我们理解了这个问题.

支持人员确认heroku local:run应按预期使用当前活动的虚拟环境.

问题是本地配置问题,由于我们的.bashrc内容:heroku local:run来源.bashrc(在我们的例子中,这是在$ PATH前面加上全局Python安装的路径,使其在虚拟环境之前找到).另一方面,heroku local不提供此文件.引用他们支持的最后一条消息:

heroku local:run在交互模式下使用bash运行命令,该模式读取你的配置文件,vs heroku local(别名为heroku local:start),它不以交互模式运行.