python - Python 中的模块路径

标签 python google-app-engine jinja2 pythonpath

我创建了一个文件夹,其中包含我的 GAE 应用程序的所有模块以及 Jinja2 等外部库,以便将所有内容分类在一个地方。我有这样的文件夹结构:

lib\
   \utils\
         \__init__.py
   \firepython
   \jinja2
   \jsonpickle
   __init__.py
   sessions.py

当我尝试从 utils__init__.py 加载 Jinja 时,出现错误 ImportError: No module named jinja2.environment。当我查看 Jinja2 导入指令时,我发现它们看起来像 from jinja2.loaders。我尝试将它们更改为类似于 from lib.jinja2.loaders 但随后会出现一些关于导入的其他错误。更重要的是,如果有更方便和正确的方法来正确导入模块,我认为在外部库源中更改这些导入不是一个好习惯。我还向 PYTHONPATH 添加了一些路径,但它并没有解决所有问题。如何正确导入放置在另一个文件夹中的外部包,可能具有深层结构?

最佳答案

事实上,您不必更改外部库中的导入 - 尽管根据您的环境,您甚至可能需要更改。

Python路径

修改您的 PYTHONPATH 就足够了; PYTHONPATH 应该包含一个“lib”路径,它可以是绝对路径,也可以是相对于您家的相对路径,例如。

那么你可以简单地做

from jinja2 import WHATEVER

sys.path.append

不用 PYTHONPATH 的另一种方法是使用 sys.path.append()并从你的 python 代码中添加你的路径。我实际上赞成这样做,因为它还允许拥有每个应用程序的路径。

使用虚拟环境

详细信息放在这里会有点长,但请关注 official doc

这些选项适用于一般的 python 开发而不是 GAE 的特殊性;如果它在您的开发机器上不起作用,您应该发布更多详细信息(精确导入、绝对路径、pythonpath...)。

正确的项目结构和 appcfg.py 的使用应该在上传到 google 时解决依赖关系:请看看这个很好的答案:How do I manage third-party Python libraries with Google App Engine? (virtualenv? pip?)并遵循这些准则。

使用 GAE 的一个好方法是通过 yaml 应用程序指令。请查看包含的文档:http://code.google.com/appengine/docs/python/config/appconfig.html#Includes

还记得 GAE officially supports python 2.5 和 2.7 支持 is experimental

Python 2.7 现在是 officially supported

关于python - Python 中的模块路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5646614/

相关文章:

python - 什么时候在 Python 中使用 _ 作为变量?

python - 根据元素是否在列列表中选择 DataFrame 的行

python - HDF5 与包含文件的文件夹有何不同?

java - Spring GAE/J Could Not find API 版本错误

python - 如何从 Airflow 中的文件执行 SQL 查询? (PostgresQL 运算符)

python - jinja2 filesystemloader 加载所有子目录

python - 某些列 pandas 上相同值的动态 bool 掩码

java google app引擎从字符串查询(如Python的GQL)

python - App Engine 服务的自定义服务帐户

python - 在 Jinja 中使用 Python `set` 关键字