如何在Google App Engine中修改sys.path(Python)?

10 投票
2 回答
4722 浏览
提问于 2025-04-15 19:51

我试着在我的处理脚本(main.py)里加了以下这一行,但好像没什么用:

sys.path.append('subdir')

subdir 这个文件夹在我的根目录下(也就是包含 app.yaml 的那个目录)。

这好像不管用,因为当我尝试导入在 subdir 里的模块时,我的应用就出错了。

2 个回答

2

我把新的目录放在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'))

这是app.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)
21

1) 确保在 subdir 文件夹里有一个空的 __init__.py 文件。

2) 使用完整的路径;像这样:

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))

补充说明:提供更多信息以回答评论中的问题。

正如 Nick Johnson 所展示的,你可以把那三行代码放在一个叫 fix_path.py 的文件里。然后,在你的 main.py 文件中,在其他所有导入之前,先写 import fix_path这是一个使用这种方法的测试应用链接

而且,确实需要 __init__.py 文件;根据 文档

当导入这个包时,Python 会在 sys.path 指定的目录中查找这个包的子目录。

__init__.py 文件是必需的,它让 Python 把这些目录当作包含包的目录;这样做是为了防止一些常见名称的目录,比如 string,意外地隐藏掉后面在模块搜索路径中出现的有效模块。在最简单的情况下,__init__.py 可以只是一个空文件,但它也可以执行包的初始化代码或者设置后面会提到的 __all__ 变量。

撰写回答