Python绝对导入不能在Ubuntu服务器上运行

时间:2015-06-11 17:08:23

标签: python import 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二进制文件。

但是,当我将其推送到运行Ubuntu的生产服务器时,我在全局安装所有依赖项时,它在运行时不断抛出错误no module named server.app

python server/app/app.py

有谁知道为什么?

2 个答案:

答案 0 :(得分:1)

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

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

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

您还可以将路径永久添加到生产环境中。请参阅this帖子。

答案 1 :(得分:0)

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

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

进口之前。

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