我的项目具有以下结构:
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
有谁知道为什么?
答案 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.py
,server
目录的父级显然不在您的python路径中,因此您必须自己添加。