【问题标题】:Changing the import statement of a 3rd party app更改第 3 方应用程序的导入声明
【发布时间】:2021-05-21 20:35:21
【问题描述】:

我有一个 django 应用程序,我正在其中导入一个 3rd 方应用程序。该应用程序是为 python3 编写的,但是我的应用程序环境是 python 2.7 和 django 1.11.16。

第 3 方应用程序与 python2 配合得很好,除了开头的一行。第 3 方应用程序的文件之一包含以下内容:

from urllib.parse import urlencode, quote

。如果我将此行更改为

from urllib import urlencode, quote

在 virtualenv 中,它可以完美运行,但是这是一个非常糟糕的解决方案。

我不想分叉整个应用程序,但有没有其他解决方法?

【问题讨论】:

  • 你能分享第 3 方应用名称吗?
  • 当然,它是 etsy2 。
  • 请注意,django 1.11 同时支持 python 2 和 3。你应该升级你的开发环境。 Python 2 即将报废。如果你继续使用 python 2,事情只会变得更糟。所以一个明智的策略是首先升级到 python 3,然后考虑升级到 Django 2(或 3)。 Django 1.11 也将​​报废。
  • (我应该指出,继续向基于报废框架的应用程序添加功能,使用报废语言>也是
  • 是的,升级到更高版本已经在进行中,但 ETA 仅适用于 8 月。

标签: django python-2.7 python-import


【解决方案1】:

免责声明:考虑到 Python2 不再受支持,您会发现与您的代码兼容的库越来越少。 我认为最好的办法是升级你的 Python 版本。这 2 个工具可以为您提供很多帮助:

话虽如此,可能还有另一种骇人听闻的方式让它发挥作用。在您的应用程序的入口点(对于 Django,manage.py,也可以在 settings.py 中工作),您可以这样做:

import sys
sys.modules['urllib.parse'] = __import__('urllib')
from urllib.parse import urlencode, quote # works now

如果这是唯一可行的区别,但我发现代码非常危险。

【讨论】:

  • 我的解决方案的问题是,如果需要升级 3rd 方应用程序,我的解决方案需要重做。在您的解决方案中,如果我们需要升级 Django,该解决方案也将被淘汰(嗯,1.11.16 可能永远不会升级)。
  • 没错,我们已经计划迁移到某些 python 3.6.x 或其他版本,但这将在 8 月完成,这仍然是充足的时间...... .
  • 提供的代码对您有用吗?根据问题描述,它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多