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

时间:2010-03-01 06:11:37

标签: python google-app-engine sys.path

我尝试将以下行添加到我的处理程序脚本(main.py)中,但它似乎不起作用:

  

sys.path.append( '子目录')

subdir位于我的根目录(即包含app.yaml的目录)中。

这似乎不起作用,因为当我尝试导入subdir中的模块时,我的应用会爆炸。

2 个答案:

答案 0 :(得分:19)

1)确保__init__.py中有一个空白subdir文件。

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

import os
import sys

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

编辑:提供更多信息以回答评论中提出的问题。

As Nick Johnson demonstrates您可以将这三行代码放在名为fix_path.py的文件中。然后,在main.py文件中,在执行所有其他导入之前执行此操作import fix_pathLink to a tested application using this technique

而且,是的,__init__.py文件是必需的;根据{{​​3}}:

  

导入包时,Python   搜索目录   sys.path寻找包   子目录。

     

需要__init__.py个文件   让Python将目录视为   包含包;这是完成的   防止具有共同的目录   名称,例如字符串,来自   无意中隐藏了有效的模块   稍后在模块搜索中发生   路径。在最简单的情况下,   __init__.py可以只是一个空文件,但它也可以执行初始化   包的代码或设置   __all__变量,稍后描述。

答案 1 :(得分: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)