不同操作系统上的Python程序

3
如果我使用Python标准库编写一个Python脚本,使用Python 2.6,只要安装了Python 2.6,它就能在所有操作系统上运行吗?
3个回答

8

这要看情况。Python标准库中的某些部分仅适用于特定平台,这些部分在Python文档中有说明。

您还需要注意如何处理文件路径 - 使用os.path.join()等函数确保路径格式正确。


7

当您阅读二进制文件时,需要小心。始终使用“rb”、“wb”等文件打开模式。在Unix/Linux等系统上可以使用“r”等模式,但在Windows上确实很重要。令人困惑的是,CSV文件是二进制文件。

指导性练习:请思考为什么这段代码在Windows上产生26而不是在非Windows系统上产生128:

>>> s = ''.join(map(chr,range(128)))
>>> len(s)
128
>>> f = open('junk.txt', 'w')
>>> f.write(s)
>>> f.close()
>>> len(open('junk.txt').read())
26

避免硬编码文件路径。
不要假设在控制台上可以散布Unicode(或UTF8编码的Unicode)并使其可读或完全呈现。
一些Python模块在某些Linux发行版上不会自动安装...您需要一个单独的“dev”包。
虽然不是操作系统问题,但一些操作系统运行在bigendian盒子上,因此如果您正在进行任何写入/读取二进制格式的工作,则需要考虑字节顺序。

提示(针对练习):尝试手动遍历输入,并查看ASCII表。 - Pablo A. Costesich

0

是的,除非您使用的模块是与操作系统相关的。

编辑:根据评论,我的回复似乎过于简短并且不够直接。

我没有讨论一般的可移植编程。

这意味着需要处理二进制数据打包和操作、C扩展问题、Windows/Unix中的路径、Windows文本中的"\r\n"以及许多其他问题。

但是就Python模块的可移植性而言,毫无疑问。

它们是可移植的。

然而,有些模块仅在特定平台上可用,如果您使用它们,则可移植性将受到限制。


“-1: 这不就像是说除了那些不行的位以外,其他都能正常工作吗?” - Lasse V. Karlsen
@Lasse V. Karlsen:不是真的。我可能会给出一个简洁明了的回答,但它的意思与Amber上面提供的答案完全相同。如果您在脚本中使用操作系统相关的模块,那么它将无法在其他操作系统上移植。这些特定于操作系统的可用模块都有很好的文档说明。 - pyfunc
尝试我的答案中的“魔数26”示例 - 它仅使用内置函数。 - John Machin
@John Machin:+1 非常完美,我甚至没有往那个方向去想。事实上,问题是关于使用Python库的可移植性,而不是一般的可移植编程。这就是我的分心所在。 - pyfunc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接