我使用AppEngine已经有一段时间了,在使用外部库时总是会遇到一些摩擦,因为我需要修改每个import语句来反映库不在项目的基本目录中这一事实。在
例如,我的目录结构可能类似(安装了请求库)
/myapp/app.yaml
/myapp/main.py
/myapp/libraries/requests/packages/
/myapp/libraries/requests/__init__.py
/myapp/libraries/requests/adapters.py
etc...
不过,阿彭吉希望
^{pr2}$然后我需要进入每个请求文件,将导入修改为
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__))
在库中的每个优init_uu.py文件的开头。然而,我突然意识到,必须有一种更有效的方法来保持干燥-但我似乎找不到它。我尝试过将它简单地包含在库中最顶层的uinit_uuy.py文件中,然后再次将其包含在每个包中最顶层的uu init_uuy.py文件中。但不幸的是,这不适用于子包。有没有办法做一个改变来解决这个问题?在
我的第三方lib都在
lib
目录中我只包括
sys.path.insert(0,'./lib')
在阿彭丁_配置.py它在任何代码之前加载。在
如果find需要插入到
sys.path
的开头,而不是末尾,如果您使用的libs的特定版本,比如webob,而不是appengine可用版本的一部分。在那么你就不必修改任何库了。。。。在
这是相当标准的python行为。在一个正常的桌面安装情况下,你正在安装vie easy_install,它将东西粘在诸如站点包和设置路径等地方。。。。但是如果你不使用这些,你不能用appengine,你必须自己做路径操作。在
相关问题 更多 >
编程相关推荐