【问题标题】:How do I find out whether a Python module is run on GAE?如何确定 Python 模块是否在 GAE 上运行?
【发布时间】:2011-07-09 07:44:40
【问题描述】:

我有一个使用 lxml 的模块。由于这不能在 GAE 上导入,我想默认使用合适的替代品。大致如下:

if not ON_GAE:
    import lxml
else:
    import beautifulsoup

如何确定我在 GAE 上?是否存在某种操作系统变量?

更新:某些模块无法在 GAE 上运行(例如 sockets)。我不想拥有多个 try ... except ImportError 块,而是想从一开始就知道哪些代码块需要替代实现。

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    你可以用这个:

    on_app_engine = os.environ.get('SERVER_SOFTWARE', '').startswith('Google')

    然后是这样的:

    if on_app_engine:
      import lxml
    else:
      import bla
    

    【讨论】:

    【解决方案2】:

    您可以简单地尝试查看一个导入是否引发异常,并仅在必要时使用另一个导入。

    try:
        import lxml
    except ImportError:
        import beautifulsoup
    

    【讨论】:

    • 这是另一种选择。但是,我更喜欢从一开始就知道某些导入不起作用的解决方案。
    • try:, import lxml, catch---什么!?
    • @basti 就我个人而言,我认为这比依赖特定的外部因素(例如服务器环境)更可取。如果 App Engine 添加了对您需要的某些模块的支持,您将透明地开始使用它们,并且它使您的代码可以在更广泛的受限平台上使用。不过,您总是可以编写一个函数来简化这些测试。
    • @Nick Johnson:总的来说,我同意你的看法。但是,在这种特定情况下,GAE 不允许您使用 socket.settimeout(...)
    • @basti 也许你应该问一个关于这个的问题,那么 - 你发布的是关于 lxml 和导入的问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2011-06-22
    • 1970-01-01
    • 2010-12-24
    • 2019-05-24
    • 2011-11-17
    • 1970-01-01
    • 2020-05-22
    相关资源
    最近更新 更多