Python中的模块路径

Ser*_*rov 6 python google-app-engine jinja2 pythonpath

我已经为我的GAE应用程序创建了一个包含所有模块的文件夹,并使用像Jinja2这样的外部库来保存所有内容.我有这样的文件夹结构:

lib\
   \utils\
         \__init__.py
   \firepython
   \jinja2
   \jsonpickle
   __init__.py
   sessions.py
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ano 6

实际上,您不必更改外部库中的导入 - 尽管取决于您的环境,您甚至可能也有.

PYTHONPATH

修改你的PYTHONPATH应该足够了; PYTHONPATH应该包含一个'lib'路径,它是绝对的或相对于你的家,例如.

然后你就可以做到

from jinja2 import WHATEVER
Run Code Online (Sandbox Code Playgroud)

sys.path.append

没有PYTHONPATH的另一种方法是使用sys.path.append()和添加python代码中的路径.我实际上赞成这一点,因为它也允许每个应用程序路径.

使用virtualenv

详细信息可能会有点长,但请遵循官方文档

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

上传到谷歌时,正确的项目结构和appcfg.py的使用应该是锻炼依赖性:请看一下这个好答案:如何使用Google App Engine管理第三方Python库?(virtualenv?pip?)并遵循这些准则.

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

还记得GAE 正式支持 python 2.5,而2.7支持是实验性的

Python 2.7现在已正式支持