【发布时间】:2017-01-18 03:09:59
【问题描述】:
我是 Python 新手。我在 Ubuntu 上使用 Anaconda 4.1.1 (Python 3.5.2) 发行版。我开始研究一个使用cx_Oracle 的项目。 O 当然可以使用pip 安装cx_Oracle。
pip install cx_Oracle
但似乎每个人都在说 Anaconda 的 conda 是一个更好的包管理器、虚拟环境管理器和依赖管理器,将 pip 和 virtualenv 放在一起。我宁愿只使用conda 来管理所有内容。
所以我创建了一个requirements.txt 文件(我的一些队友仍将使用pip 和virtualenv),其中包含以下行。 (我想支持 Python 3.5,所以我需要cx_Oracle 5.2.1,当前最新的。)
cx_Oracle==5.2.1
然后我告诉conda创建一个虚拟环境foobar:
conda create -n foobar --file requirements.txt
这失败了;不幸的是,cx_Oracle 5.2.1 还没有在 Continuum conda 存储库中(尽管它发布已经过去了半年)。然而,有几个频道(例如mgckind)声称提供版本 5.2.1。只有一个问题:所有频道都提供cx_oracle 而不是cx_Oracle(注意大小写差异)。所以这行不通:
conda create -n foobar -c mgckind --file requirements.txt
即使我在上面的示例中指定了一个频道,即使requirements.txt 清楚地表示cx_Oracle,conda 也会将cx_oracle 降为小写o。因为 Python 模块导入显然区分大小写,所以我的所有测试都失败了,因为它们找不到带有大写 O 的 cx_Oracle。
我是不是因为我是 Python 新手而遗漏了一些简单的东西?还是 Anaconda 真的既落后于时代又与 cx_Oracle 不兼容,这意味着我将不得不使用 pip install 并将其从 PyPI 中删除?
如果确实存在大小写差异,这种情况在 Conda 和 PiPY 上是否常见?仅以小写字母命名事物是康达政策吗?其他人如何处理差异?
【问题讨论】:
-
你真的可以导入模块吗?如果是这样,您是否尝试将
import cx_Oracle更改为import cx_oracle as cx_Oracle? -
我没有尝试更改代码。显然这是最后的手段,但它回避了这个问题。正如我所提到的,我的同事正在使用 pip --- 如果我更改它,代码会中断,但是他们使用
pip下载cx_Oracle? -
使用异常处理:
try: import cx_Oracle except ImportError: import cx_oracle as cx_Oracle -
你只是改变了文件的顶部。
-
落后的不是conda,而是cx_Oracle。混合大小写的包名称为un-Pythonic。
标签: python pip anaconda cx-oracle conda