Python绝对导入在Ubuntu服务器上不工作

Python绝对导入在Ubuntu服务器上不工作,python,import,server,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

我的项目具有以下结构:

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和虚拟环境文件夹中的Python二进制文件
/server/env/bin/

但是,当我将其推送到运行Ubuntu的生产服务器(我在其中全局安装所有依赖项)时,它会在我运行时不断抛出错误
没有名为server.app的模块

python server/app/app.py

有人知道原因吗?

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

import sys
print "\n".join(sys.path)
在你的进口之前


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

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

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

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


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

没有服务器/app.py,但是有服务器/app/app。py@Rash感谢提醒,刚刚更正。在IDE环境中,他们会自动编辑python源路径。您需要将路径添加到python路径中。使用此sys.path.append('/path/to/the/example_file.py')嗯。不幸的是,当你们提到我使用@myusername时,我没有收到通知。很有趣。可能是因为你们在我的用户名后面加了撇号username@Rash我们在评论区
范围之外提到您,这可能就是原因。如果我使用@Rash的建议
sys.path.append('/path/to/the/example_file.py')
,我应该把这段代码放在哪个文件中?谢谢!搞乱
sys.path
通常是个好主意。最好更新你的
PYTHONPATH
环境变量(将运行你的应用程序的用户之一)。在这样做的同时,在生产中使用virtualenv也更安全。。。