2008-12-02 47 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'} 

希望有所幫助。

相關問題