我尝试将以下行添加到我的处理程序脚本(main.py)中,但它似乎不起作用:
sys.path.append('subdir')
subdir
位于我的根目录中(即包含 的目录app.yaml
)。
这似乎不起作用,因为当我尝试导入存在于 中的模块时subdir
,我的应用程序会爆炸。
我尝试将以下行添加到我的处理程序脚本(main.py)中,但它似乎不起作用:
sys.path.append('subdir')
subdir
位于我的根目录中(即包含 的目录app.yaml
)。
这似乎不起作用,因为当我尝试导入存在于 中的模块时subdir
,我的应用程序会爆炸。
1) 确保您__init__.py
在subdir
.
2)使用完整路径;像这样的东西:
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))
编辑:提供更多信息以回答评论中提出的问题。
正如尼克约翰逊演示的那样,您可以将这三行代码放在一个名为fix_path.py
. 然后,在您的main.py
文件中,import fix_path
在所有其他导入之前执行此操作。 使用此技术链接到经过测试的应用程序。
而且,是的,该__init__.py
文件是必需的;根据文档:
导入包时,Python 会在 sys.path 上的目录中搜索包子目录。
需要这些
__init__.py
文件才能使 Python 将目录视为包含包;这样做是为了防止具有通用名称(例如字符串)的目录无意中隐藏了稍后出现在模块搜索路径上的有效模块。在最简单的情况下,__init__.py
可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__
变量,稍后介绍。
它对我有用,将新目录作为 sys.path 中的第一个条目插入。
path_changer.py:
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'libs'))
sys.path.insert(1, os.path.join(os.path.dirname(__file__), 'apps'))
应用程序.py:
import path_changer
from google.appengine.ext.webapp.util import run_wsgi_app
from flask import Flask
import settings
app = Flask('myapp')
app.config.from_object('settings')
from website import views as website_views
run_wsgi_app(app)