2010-04-26 53 views

回答

30

只需将short_url.py文件放入您的应用程序目录即可。

示例应用程序引擎项目:

 
myapp/ 
    app.yaml 
    index.yaml 
    main.py 
    short_url.py 
    views.py 

而在views.py(或地方),你就可以导入像这样:

import short_url 

对于更复杂的项目,可能是一个更好的方法是专门为依赖项创建一个目录;说lib

 
myapp/ 
    lib/ 
     __init__.py 
     short_url.py 
    app.yaml 
    index.yaml 
    main.py 
    views.py 
from lib import short_url 

编辑#2:
道歉,我应该提到这点。您需要修改您的路径,这要感谢Nick Johnson进行以下修复。
确保在启动应用程序之前运行此代码;是这样的:

import os 
import sys 

def fix_path(): 
    # credit: Nick Johnson of Google 
    sys.path.append(os.path.join(os.path.dirname(__file__), 'lib')) 

def main(): 
    url_map = [ ('/', views.IndexHandler),] # etc. 
    app = webapp.WSGIApplication(url_map, debug=False) 
    wsgiref.handlers.CGIHandler().run(app) 

if __name__ == "__main__": 
    fix_path() 
    main() 

EDIT3:
为了得到这个代码的所有其他导入之前运行,你可以把路径在应用程序的根目录一个它自己的文件管理代码(Python的认识该目录中的所有内容都没有任何路径修改)。
然后你只是确保该进口

import fix_path 

...在你main.py文件中的所有其他进口之前。
这是link to full, working example以防我的解释不清楚。

+0

即使在使用此布局重新启动应用程序服务器后,我仍然遇到问题。 from lib import short_url ImportError:没有名为lib的模块 – 2010-04-27 19:16:59

+0

谢谢 - 它现在正在工作。哪里是最好的地方调用fix_path()?我打电话这样说: 如果__name__ == '__main__': fix_path() 的main() 然后我从我的代码中调用这个函数: 高清generate_key(ID): 进口SHORT_URL 返回short_url。encode_url(id) 有什么地方可以打电话给fix_path()让我们把所有的输入放在一起放在文件的顶部? – 2010-04-27 20:05:49

+0

@布莱恩:太好了。真高兴你做到了。我将添加另一个示例,让您将导入保留在一个位置。 – bernie 2010-04-27 20:09:22

0

由于用python编写的url_shortener程序,你可以在你的源代码中包含并像其他python模块一样导入它。

5

我会第二次给出@Adam Bernier和@ S.Mark给出的答案,尽管adam的解释更详细。通常,只要不尝试在沙箱外工作,即不能创建文件,无法打开网络套接字等,您可以将任何纯Python模块/软件包添加到您的App Engine目录并按原样使用。 。

也记住的硬限制:文件(应用程序文件和静态文件)的

  • 最大总数:3000
  • 的应用程序文件的最大尺寸:10兆
  • 的最大尺寸静态文件:10兆字节的所有应用程序和静态文件的
  • 最大总尺寸:150兆字节

UPDATE(2011年10月):大多数这些数字have been increased到:

  • 文件(应用程序文件和静态文件)的最大总数:10,000
  • 的应用程序文件的最大尺寸:32MB
  • 的最大尺寸静态文件:32MB

更新(2012年6月):最后的极限was bumped up到:

  • 所有应用程序和静态文件的最大总大小:1GB
1

您可以将Python包导入为ZIP。这样可以避免最大文件数量。

The app engine docs解决这个问题。

python 2.5: zipimport is supported.

python 2.7: zipimport is not supported, but Python 2.7 can natively import from .zip files.

这就是我如何导入博托。

sys.path.insert(0, 'boto.zip') 
import boto #pylint: disable=F0401 
from boto import connect_fps #pylint: disable=F0401 

这种技术的缺点包括不得不手动重新存档许多软件包。

例如,boto.zip解压缩到“boto”子目录中,其中包含“boto”模块(作为另一个子目录)。

所以要导入boto自然你可能不得不从boto进口boto,但是这会导致缺乏__init__.py的怪异。

要解决这个问题,只需简单地解压缩,然后将boto子文件夹手动存档为boto.zip,然后将其放在应用程序文件夹中。

相关问题