2008-12-02 51 views
4

我想要做的是修补现有的使用urllib2在应用程序引擎上运行的python模块,但我不想破坏它,因此可以在其他地方使用它。所以我正在寻找一个快速解决方案来测试模块是否导入到应用程序引擎环境中。在urllib2上捕获ImportError可能不是最好的解决方案。检测应用程序引擎环境中是否导入了模块

回答

11

你可以简单地使用sys.modules来测试一个模块已经进口的(我使用unicodedata为例):

>>> import sys 
>>> 'unicodedata' in sys.modules 
False 
>>> import unicodedata 
>>> 'unicodedata' in sys.modules 
True 
0

你可以做对关键环境变量进行简单的检查。尽管如此,并没有确切地说明这可能有多可靠。

import os, logging 
try: 
    os.environ['APPENGINE_RUNTIME'] 
except KeyError: 
    logging.warn('We are not in App Engine environment') 
else: 
    logging.info('We are in the App Engine environment') 

您也可以define your own custom environment variable in your App Engine configuration file,这将任何模块内观看来自os.environ。所以,在你的app.yaml文件中输入如下内容:

env_variables: 
    MY_APP_ENGINE_ENVIRONMENT: '982844ed9cbd6ce42318d2804386be29cbc7c35a' 

...会给你一个明确的ID来引用。

从开发服务器,这里的环境变量,我得到:

{'USER_EMAIL': '', 
'DATACENTER': 'us1', 
'wsgi.version': (1, 0), 
'REQUEST_ID_HASH': 'E2C19D51', 
'SERVER_NAME': 'mydesktop', 
'QUERY_STRING': '', 
'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
'APPENGINE_RUNTIME': 'python27', 
'wsgi.input': <cStringIO.StringI object at 0x2f145d0>, 
'SERVER_PROTOCOL': 'HTTP/1.1', 
'HTTPS': 'off', 
'USER_IS_ADMIN': '0', 
'TZ': 'UTC', 
'REMOTE_ADDR': '192.168.0.2', 
'HTTP_X_APPENGINE_COUNTRY': 'ZZ', 
'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36', 
'SERVER_SOFTWARE': 'Development/2.0', 
'HTTP_CACHE_CONTROL': 'max-age=0', 
'DEFAULT_VERSION_HOSTNAME': 'mydesktop:8080', 
'SERVER_PORT': '8080', 
'wsgi.run_once': False, 
'REQUEST_METHOD': 'GET', 
'USER_ID': '', 
'AUTH_DOMAIN': 'gmail.com', 
'USER_NICKNAME': '', 
'USER_ORGANIZATION': '', 
'wsgi.multiprocess': True, 
'INSTANCE_ID': '8a8e02e6efa8d195346ae0c90cfeafce8aa2', 
'PATH_INFO': '/', 
'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8', 
'HTTP_HOST': 'mydesktop:8080', 
'wsgi.errors': <google.appengine.api.logservice.logservice.LogsBuffer object at 0x2f09c30>, 
'APPLICATION_ID': 'dev~myapp', 
'wsgi.multithread': True, 
'CURRENT_VERSION_ID': 'version-1', 
'SCRIPT_NAME': '', 
'REQUEST_LOG_ID': '4eafbc91ca4ebd5fee53f19eeab2eb26d243d9ddc92b6b9bc0a063eabdc84cfff', 
'wsgi.url_scheme': 'http'} 

希望有所帮助。

相关问题