我可以在ubuntu上将pyodbc egg重命名为odbc egg吗?

时间:2013-05-22 01:08:32

标签: python ubuntu pyodbc

无论出于什么原因,黑暗的历史,我们已经在Windows上使用pyodbc运行我们的系统很长一段时间了,但它被称为odbc。

现在尝试移植到Linux,我已经安装了pyodbc,但现在我的长时间运行的代码无法“导入odbc”,尽管“import pyodbc”工作正常。

一个解决方案是“if sys.plateform.find('linux')”并执行“导入pyodbc as odbc”或“import pyodbc”取决于,但这看起来很糟糕。

有没有办法重命名鸡蛋?

我天真地尝试重命名这两个文件,“import odbc”找到这些文件。 。 。但由于内部命名,似乎很困惑:

  File "/local/mnt/workspace/aswp401/source/qcom/qct/modem/arch/sandbox/fmerrow/hub/py/utils/dbutils.py", line 1, in 
    import odbc
ImportError: dynamic module does not define init function (initodbc)

问题当然是函数名为initpyodbc,而不是initodbc。

是否有一种正式的方式来进行这样的重命名?或者sys.platform是我最好的选择吗?

1 个答案:

答案 0 :(得分:0)

处理此问题的最简单方法是:

try:
    import pyodbc
except ImportError:
    import odbc as pyodbc

除非有一些令人信服的理由不这样做,否则不要试图猜测将安装哪一个,只是尝试一下。这是EAFP的情况 - 但除了通常的优点之外,即使你的猜测后来变得无效,它仍会继续工作(例如,因为你设置了一个OpenBSD机器,升级了包你的Windows机器,...)。

通常最好首先尝试模块的官方当前名称,然后尝试更旧/变体/等。名字作为后备。

在您的代码中使用官方当前名称通常也更好......但如果您已经有很多代码odbc.thisodbc.that,您不相信简单的搜索和替换或其他重构工具,您可以import pyodbc as odbc代替。


重命名鸡蛋可能会或可能不会起作用(看起来它不会在你的情况下),但即使它确实如此也是一个坏主意。

至少,它会让您的包管理器感到困惑(无论是apteasy_installpip还是其他内容。例如,它可能无法升级或卸载软件包,安装依赖它的其他软件包等等。

最糟糕的是,它可能“大部分”工作,但随后失败,因为例如,隐藏在包中间的C扩展模块中的一些代码依赖于完全限定的模块名称,并且该代码仅在您的应用程序的一些罕见的边缘情况。