Python 绝对导入无法在 Ubuntu 服务器上运行

Python absolute import not working on Ubuntu server

我的项目结构如下:

server/ (root of project)
  |
  |--- __init__.py
  |--- requirements.txt
  |--- env/ (virtual environment)
  |--- app/ (main app folder)
        |--- __init__.py (defines a 'app = Flask(__name__)' object)
        |--- app.py (runs app on local server)
        |--- models.py
        |--- views.py

我在本地机器上 app.py 导入不同模块的方式是 do:

# /server/app/app.py

from server.app import app 
from server.app.models import *
from server.app.views import *

它在我的本地机器上运行良好(使用 PyCharm IDE,以及虚拟环境文件夹 /server/env/bin/ 中的 Python 二进制文件。

但是,当我将其推送到生产服务器 运行ning Ubuntu 时,我在其中全局安装了所有依赖项,当我 运行:

python server/app/app.py

有谁知道为什么?

正如@Rash 提到的,您的 IDE 很可能将包含 /server 的目录添加到您的 python path。您可以通过添加

app.py 中查看
import sys
print "\n".join(sys.path)

在您导入之前。

当您手动 运行 您的应用程序时,即 python server/app/app.py,您的 server 目录的父目录显然不在您的 python 中路径,所以你必须自己添加。

任何 IDE 环境通常设置 python 路径。例如。在 Eclipse 中右键单击您的项目并查看属性。您会看到您的主项目列在 python 路径中。此路径用于定位模块。

现在在您的生产代码中,您不在 IDE 中。所以普通的 python 解释器找不到你的路径。因此你需要指定这个。

一种方法是在执行导入之前添加 sys.path.append('/path/to/the/project')(这应该针对第一个执行的脚本完成,在本例中为 app.py,这样您只需要执行此操作一次)。

您还可以将您的路径永久添加到您的生产环境中。参见 this post。