【问题标题】:Case sensitivity with names of modules and files in python 2.7.15python 2.7.15中的模块和文件名称区分大小写
【发布时间】:2019-01-28 10:43:33
【问题描述】:

我遇到了一个相当有趣的情况:我在一个大型的科学合作中工作,其主要软件包基于 C++ 和 python(仍然是 2.7.15)。这种协作也有多个服务器(SL6)来运行框架。由于我最近加入了合作,我收到了有关如何设置和运行软件的说明。一切都在服务器上完美运行。现在,有理由不连接到服务器来执行简单的任务或代码开发,而是最好在本地笔记本电脑上做这些事情。因此,我根据收到的配方设置了一个虚拟机(docker),安装了一些东西(fuse、cvmfs、docker 映像等),并以这种方式设法将我的 MacBook(OSX 10.14.2)连接到为了编译和运行软件,需要获取一些库的服务器。 2小时后它确实编译了!到目前为止一切顺利..

现在有趣的部分来了:您通过执行一个特定的 python 脚本来运行软件,该脚本作为另一个 python 脚本的参数。还不好笑。但是在这个相互采购的大量 python 脚本中的某个地方,有一个非常简单的任务:

import logging
variable = logging.DEBUG

这是在名为 Logging.py 的脚本中编写的。所以脚本和库只有第一个字母不同:l 或 L。在服务器上,这运行非常顺利。在我的本地 VM 设置上,我收到错误

AttributeError: 'module' 对象没有属性 'DEBUG'

我检查了 python 版本 (which python) 和日志库的位置 (print logging.__file__),在这两种设置中,我得到的两个命令的结果相同。因此,运行相同的 python 版本,并获取相同的日志库,但在一种情况下,与获取库的文件的名称混淆。

所以我想知道,是否有一些“约定文件”(如 vi 的 .vimrc)来源于某个地方,可以通过将一些容差参数设置为其他值来解决这个问题......?

非常感谢您的帮助! 康尼

【问题讨论】:

  • MacOS 文件系统默认不区分大小写。
  • 嗯!所以我采购的python版本无关紧要(我从服务器采购那个),无论如何它都不区分大小写,我无能为力让它运行吗?我想我应该“将日志导入为 loggingLib”并相应地破解代码。但是有没有办法避免呢?
  • 我猜你不能改变Logging.py模块的名字?

标签: python macos python-2.7 logging


【解决方案1】:

正如其他人所说,OSX 默认情况下将名称视为不区分大小写,因此 Python 捆绑的 logging 模块将与您的 Logging.py 文件混淆。我建议更好的解决方法是重命名Logging.py 文件,因为这将提高代码库的兼容性。否则,您可以使用“磁盘工具”创建一个“区分大小写”的 APFS 文件系统

如果您要创建文件系统,我建议不要将根/系统分区更改为区分大小写,因为这会以微妙的方式破坏各种程序。您可以重新分区您的磁盘并创建一个区分大小写的文件系统,或者创建一个“图像”(这可能会更慢,不确定多少)并在那里工作。只需确保在创建文件系统时选择“APFS(区分大小写)”格式!

【讨论】:

  • 我同意应该更改名称。然而,虽然 MacOS 的文件系统默认不区分大小写(尽管会保留大小写); python 仍应将这两个名称视为不同的名称。如果我这样做import OS, SYS,我会收到一个错误。
  • 非常感谢大家的cmets!恐怕我有两个选择:重新分区我的 MacBook 以获取 APFS 磁盘并重新安装所有内容,或者更改脚本名称。显然,该脚本在整个框架中的大约 100 个地方被调用。我必须挖掘出我最好的外交技巧来说服我的开发人员真正更改该文件名......再次感谢!康尼
猜你喜欢
  • 1970-01-01
  • 2012-02-03
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 2015-02-22
  • 1970-01-01
  • 2016-05-15
相关资源
最近更新 更多