python - 从 NTFS 共享导入 Linux 上的 Python 模块

标签 python windows linux

我的问题是 Python 在 Windows/Linux 上搜索模块的方式不同。

我在 Windows 7 机器 (NTFS) 上有一个目录 foo,我将其挂载在同一台机器上运行的 Ubuntu 10.04 虚拟访客中(通过 VirtualBox 的访客添加)。在 foo 中,有一个文件 OS.py(注意大写),其内容如下:

bar = 1

这是 foo 内主机 (Win 7) 上 Python (2.5.4) session 的输出:

>>> f = open('os.py') # Note the lower case
>>> f.readlines()
['bar = 1\n']
>>> f.close()
>>> import os
>>> dir(os)
(content of the Python standard os package)

这是客户机 (Ubuntu) 的输出,在 foo 中运行 Python 2.6.5:

>>> f = open('os.py') # Note the lower case
>>> f.readlines()
['bar = 1\n']
>>> f.close()
>>> import os
>>> dir(os)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar']

因此在两个平台上,Python 在使用 open('os.py') 时加载相同的文件 foo/OS.py,这很好,因为 NTFS 是不区分大小写。我不明白的是关于 import 的不同行为。我原以为 foo/OS.py 会在两个平台上导入,或者至少行为是相同的。

这种不一致有什么原因吗?

注意:'' 是两个平台上 sys.path 中的第一个条目。

最佳答案

您的问题与 Linux 或 NTFS 无关,在具有任何 Windows 文件系统 NTFS 或 FAT 的纯 Windows 环境中,行为完全相同:Windows 认为文件名不区分大小写,但 Python 认为模块名称区分大小写。

这里发生的一切是,当 Python 搜索一个模块时,它会进行自己的区分大小写的搜索,因此它永远不会看到小写的文件名:它不会盲目地尝试在每个模块中打开文件“OS.py” Python 路径上的文件夹,它会在每个文件夹中搜索名为“OS”的文件以及许多可能的扩展名中的任何一个,在 Windows 上搜索可能会返回名为“os”的文件,但它们会立即被过滤掉并被忽略。

如果我没记错的话,确切的行为随着时间的推移而变化:在 Windows 上导入模块时,非常旧的 Python 版本会忽略大小写,然后它变成了警告,现在它只是忽略它们。

有关详细信息,请参阅 http://www.python.org/dev/peps/pep-0235/ (但我不知道它是否完全是最新的)。

关于python - 从 NTFS 共享导入 Linux 上的 Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6786644/

相关文章:

python - 使用 Python 的 Base-2(二进制)表示

linux - 从 Windows 7 上的 Linux 虚拟框访问文件

java - 数据库连接代码运行在 Linux 而不是 Windows

linux - 在包名称中找不到“software-properties-common”。尝试能力

mysql - 错误1005(HY000): Can't create table 'project.Event' (errno: 150) *mySQL* create table error

在 Linux 上执行 chmod 000 命令后,仍会读取 PHP wbepage 文件

Python:如何从 FQDN 获取 IP 地址

python - 使用 pip install --editable 更改 .egg-info 目录

python - 检查列表是否包含python中的另一个列表

c# - 您能否以编程方式查看 USB 设备在 Windows 中请求的安培数?