10

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

sys.path.append('subdir')

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

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

4

2 回答 2

21

1) 确保您__init__.pysubdir.

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__变量,稍后介绍。

于 2010-03-01T06:48:29.920 回答
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'))

应用程序.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)
于 2011-06-06T02:14:15.210 回答