如何将Django项目迁移到Pythonanywhere

7 投票
1 回答
3380 浏览
提问于 2025-04-18 00:14

我正在尝试在Pythonanywhere上搭建一个Django应用。我已经搞定了Bitbucket,并把代码克隆下来了。我删除了给我的目录里的文件,但就是无法让它正常工作。

我执行了'syncdb',然后当我访问我认为是应用的正确网址时,总是出现“未处理的异常”——错误提示是找不到'import'里的'portfolio.settings'(portfolio是这个应用的名字)。

我也不知道该怎么设置MEDIA_ROOT和STATIC_DIRS——据我所知,这些应该是完整路径,而不是相对路径。

我还是个Django新手,这个过程让我感到有点不知所措,因为这个应用在本地运行得很好,但部署到线上却很麻烦。任何帮助都非常感谢(我没找到Pythonanywhere的论坛——看起来也没什么人讨论,或者说帮助不太有用)。

我还想过:为什么不让Pythonanywhere为我设置一个空项目呢?但我还是不知道怎么处理STATIC_DIRS和MEDIA_ROOT,也不太清楚怎么让我的项目适应他们的设置。

谢谢任何帮助。

1 个回答

5

如果你遇到类似的问题:在网页应用中出现导入错误,通常是因为你的 sys.path 没有正确设置。你可以检查一下你的 WSGI 文件(在 PythonAnywhere 上,你可以在网页标签中找到它。其他主机可能会有不同的做法)。

举个例子:

  • /home/myusername/myproject/ 是你的项目文件夹
  • /home/myusername/myproject/my_cool_app/ 是你其中一个应用的文件夹
  • /home/myusername/myproject/myproject/settings.py 是设置文件的位置

你的 WSGI 文件应该包含:

sys.path.append('/home/myusername/myproject')
# ...
DJANGO_SETTINGS_MODULE = 'myproject.settings'

而你的 settings.py 文件应该包含:

INSTALLED_APPS = (
   #...
   'my_cool_app'

所有的内容都需要对齐,这样你在 INSTALLED_APPS 中的应用名称和你的 DJANGO_SETTINGS_MODULE 环境变量才能正确导入,这些都是相对于你添加到 sys.path 的文件夹来说的。

所以在上面的例子中,你可以这样做:

# wsgi file
sys.path.append('/home/myusername')
DJANGO_SETTINGS_MODULE = 'myproject.myproject.settings'
# settings.py
INSTALLED_APPS = 'myproject.my_cool_app'

不过最好不要这样做,这样太复杂了。

顺便说一下,文档中有一个关于 sys.path 和导入问题的详细指南,适用于 PythonAnywhere。

撰写回答