我已经使用AppEngine有一段时间了,在使用外部库时总是有点摩擦,在外部库中,我需要修改每个import语句,以反映库不在项目的基本目录中。
例如,我的目录结构可能类似(安装了请求库)

/myapp/app.yaml
/myapp/main.py
/myapp/libraries/requests/packages/
/myapp/libraries/requests/__init__.py
/myapp/libraries/requests/adapters.py
etc...

但是appengine希望
/myapp/app.yaml
/myapp/main.py
/myapp/requests/packages/
/myapp/requests/__init__.py
/myapp/requests/adapters.py
/myapp/requests/api.py
etc...

然后我需要进入每个请求文件,将导入修改为
from libraries.requests import adapters

而不是简单的
import adapters

可能在api.py中。如果我不修改它,我会得到一个导入错误,例如。
ImportError: No module named adapters

我看了下面的How to import modules in Google App Engine?建议使用
sys.path.append(os.path.join(os.path.dirname(__file__), 'libraries'))

把这个问题转化成我的问题
sys.path.append(os.path.dirname(__file__))

在库中每个初始文件的开始处。然而,让我印象深刻的是,必须有一个更有效的方法,并保持干燥-但我似乎找不到它。我试过简单地将它包含在库中最顶层的in it.py文件中,然后再次包含在每个包中最顶层的init.py文件中。但不幸的是,这对子包不起作用。有办法改变一下吗?

最佳答案

我所有的第三方lib都在
我只是包括
lib
在appengine_config.py中,它在任何代码之前加载。
如果find需要在sys.path.insert(0,'./lib')开头插入,而不是在使用特定版本的libs(如webob),而webob不是appengine可用版本的一部分,则需要在sys.path结尾插入。
那么你就不必修改任何库等等。。。。
这是相当标准的python行为。在一个正常的桌面安装情况下,你正在安装vie easy_install,它把东西粘在诸如站点包和设置路径等地方。。。。但如果你不使用这些,你不能用appengine,你必须自己做路径操纵。

关于python - 我如何在Appengine项目的library文件夹中简单地修改整个请求包的路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18248784/

10-12 22:06