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

Python 我可以在ubuntu上将pyodbc-egg重命名为odbc-egg吗?,python,ubuntu,pyodbc,Python,Ubuntu,Pyodbc,从黑暗的历史来看,无论出于什么原因,我们在windows上使用pyodbc运行我们的系统已经有很长一段时间了,但它被称为odbc 现在尝试移植到Linux,我已经安装了pyodbc,但是现在我的长时间运行的代码无法“导入odbc”,尽管“导入pyodbc”工作正常 一种解决方案是“if sys.platform.find('linux')”并根据需要执行“import pyodbc as odbc”或“import pyodbc”,但这似乎有点老套 有没有办法把鸡蛋改名 我天真地尝试重命名这两个

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

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

一种解决方案是“if sys.platform.find('linux')”并根据需要执行“import pyodbc as odbc”或“import pyodbc”,但这似乎有点老套

有没有办法把鸡蛋改名

我天真地尝试重命名这两个文件,“导入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) 文件“/local/mnt/workspace/aswp401/source/qcom/qct/modem/arch/sandbox/fmerrow/hub/py/utils/dbutils.py”,第1行,在 导入odbc ImportError:动态模块未定义初始化函数(initodbc) 当然,问题是函数名为initpyodbc,而不是initodbc

有没有一个官方的方法来进行这样的重命名?还是sys.platform是我的最佳选择


弗兰克

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

try:
    import pyodbc
except ImportError:
    import odbc as pyodbc
除非有令人信服的理由,否则不要试图猜测将安装哪一个,只需尝试一下。这是一个例子,但除了通常的优点外,即使您的猜测后来无效(例如,因为您设置了OpenBSD机器,在Windows机器上升级了软件包,…),它也会继续工作

通常,最好先尝试模块的官方当前名称,然后尝试旧的/variant/etc.名称作为备用名称

通常情况下,在代码中使用官方的当前名称也会更好……但是如果您已经有很多代码使用了
odbc。这
odbc。那
,并且您不相信简单的搜索和替换或其他可供您使用的重构工具,那么您可以将pyodbc导入为odbc


只是重命名鸡蛋可能有效,也可能无效(在您的情况下,看起来不会),但即使它有效,这也是一个坏主意

至少,它会混淆您的软件包管理器(无论是
apt
easy\u install
pip
,还是其他东西)。例如,它可能无法升级或卸载软件包,安装依赖于它的其他软件包,等等

最糟糕的是,它可能是“大部分”工作,但后来失败了,因为,在代码包中的C扩展模块中埋葬的一些代码依赖于完全限定的模块名,而该代码只在应用程序的一些罕见的边缘情况下被调用。