Django 更改第三方应用程序的导入语句

Django 更改第三方应用程序的导入语句,django,python-2.7,python-import,Django,Python 2.7,Python Import,我有一个django应用程序,我正在导入一个第三方应用程序。该应用程序是为python3编写的,但是我的应用程序环境是Python2.7和django 1.11.16 除了开头的一行之外,第三方应用程序在python2上运行得非常好。第三方应用程序的一个文件包含以下内容: from urllib.parse import urlencode, quote 。如果我把这行改成 from urllib import urlencode, quote 在virtualenv中,它可以完美地工作,但

我有一个django应用程序,我正在导入一个第三方应用程序。该应用程序是为python3编写的,但是我的应用程序环境是Python2.7和django 1.11.16

除了开头的一行之外,第三方应用程序在python2上运行得非常好。第三方应用程序的一个文件包含以下内容:

from urllib.parse import urlencode, quote
。如果我把这行改成

from urllib import urlencode, quote
在virtualenv中,它可以完美地工作,但是这是一个非常糟糕的解决方案


我不想对整个应用程序进行分叉,但还有其他解决方法吗?

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

有了这句话,可能还有另一种骇人的方式让它发挥作用。在应用程序的入口点中(对于Django,manage.py也可以在settings.py中工作),您可以执行以下操作:

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

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

你能分享第三方应用程序名称吗?当然,它是etsy2。请注意,django 1.11同时支持python 2和3。您应该升级您的开发环境。Python2是生命的终结。如果继续使用Python2,情况只会变得更糟。因此,明智的策略是首先升级到Python3,然后考虑升级到Django 2(或3)。Django 1.11也已经过时了。(我应该指出的是,继续在一个基于报废框架的应用程序中使用报废语言添加功能也是>,<一个“非常糟糕的解决方案”。事实上,更糟糕的是……因为你可能不再得到安全修复。)没错,升级到更高版本已经在进行中,但ETA只适用于8月份。我的解决方案的问题是,如果第三方应用程序需要升级,我的解决方案需要重做。在您的解决方案中,如果我们需要升级Django,这个解决方案也将被删除(好吧,1.11.16可能永远不会升级)。没错,我们计划迁移到一些python 3.6.x或其他版本,但这将在8月份完成,这仍然是一段很长的时间。提供的代码对您有用吗?根据问题描述,它可以工作。