【问题标题】:How do you modify sys.path in Google App Engine (Python)?如何在 Google App Engine (Python) 中修改 sys.path?
【发布时间】:2010-03-01 06:11:36
【问题描述】:

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

sys.path.append('subdir')

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

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

【问题讨论】:

  • $10 表示您有一个错误的 .pyc 文件,如果错误“自行修复”。

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


【解决方案1】:

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

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 文件是必需的;根据documentation:

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

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

【讨论】:

  • 我不想创建一个名为 subdir 的包。这不是 1) 会做的吗?另外,我会将您在 2) 下提到的代码放在哪里??
  • 2) 是我正在寻找的答案。 1)正如您对文档的引用所解释的那样,这使得 subdir 成为一个包,这不是我想要的。
  • 实际上,我不确定为什么将 sys.path.append('subdir') 添加到 main.py(我的 app.yaml 中唯一的非静态处理程序)的原始方法没有'不工作。我刚刚又试了一次,但这次没有爆炸:/
  • __init__.py 在更改 sys.path不需要。您添加的路径不是模块本身,而是它的内容。
【解决方案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)

【讨论】:

    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    相关资源
    最近更新 更多