我在生产服务器上设置 Django 并且有这个奇怪的错误(在下图中)正如你所见,pythonpath 似乎没问题(第一行是我的项目文件夹),我的项目/项目文件夹中肯定有模块 urls.py,我在那里有初始化文件和我的 ROOT_URLCONF = 'project.urls'(我也尝试过没有项目名称,但它也没有帮助)。所以,这很奇怪为什么它找不到它:(我不得不说我试图在服务器上创建一个新项目,然后它似乎没问题,但是这个项目是从本地服务器复制的,它的行为就像这个。
错误的打印屏幕:
我在生产服务器上设置 Django 并且有这个奇怪的错误(在下图中)正如你所见,pythonpath 似乎没问题(第一行是我的项目文件夹),我的项目/项目文件夹中肯定有模块 urls.py,我在那里有初始化文件和我的 ROOT_URLCONF = 'project.urls'(我也尝试过没有项目名称,但它也没有帮助)。所以,这很奇怪为什么它找不到它:(我不得不说我试图在服务器上创建一个新项目,然后它似乎没问题,但是这个项目是从本地服务器复制的,它的行为就像这个。
错误的打印屏幕:
实际上,您的项目看起来并不在您的路径中。回溯只显示 Django 包。
我能想到的唯一问题是包创建的过程。您遵循什么流程来部署您的 Django 应用程序?
如果您已经在本地机器或 CI 服务器上编译了 Django 应用程序,然后部署了已编译的包,那么您将遇到导入模块问题,因为 pyc 文件将包含本地机器或 CI 服务器的硬编码路径。要在编译 python 文件之前修复它,您应该在本地/CI 服务器上创建相同的层次结构,然后编译和部署。
希望这可以帮助。
[编辑]
我同意 pyc 文件中的硬编码路径是 PITA,一旦我们发现它,我们就一直在生产环境中这样做。
但是我不同意您在服务器上重新生成 pyc 文件,因为随着您的应用程序将增长并且您转向大型应用程序,它会变得非常慢。
您不必保留开发环境目录以遵循生产目录结构。相反,您可以在开发机器上拥有任何目录路径并创建一个单独的 bash 脚本,该脚本将通过创建您在生产中遵循的目录结构为您创建一个包。Bash 脚本将具有以下逻辑
python -m compileall .
您可以在生产服务器上解压缩此 tarball,您的应用程序应该可以正常运行。
有关在 python 中创建包和最佳实践的更多信息,请查看此视频