【问题标题】:Python Compilation Error for Code implemented on Windows and trying to run on Linux在 Windows 上实现并尝试在 Linux 上运行的代码的 Python 编译错误
【发布时间】:2011-06-16 20:44:15
【问题描述】:

我是 100% 的 Python 新手,我在 Windows 和 Linux 之间切换时遇到了这个关于兼容性的奇怪问题。我实现了一个小程序,它实现了一个 TCP/IP 套接字,该套接字与支持 TCP/IP 上的服务器套接字的设备进行通信。我的程序在 Windows 上运行时运行良好,因此我决定在 Linux 上对其进行测试,因为最终我想在 CRONTAB 上将它作为计划任务运行,从服务器获取信息并导出到 XML。这是我尝试在 Linux 上(在 python 2.6、2.7 和 3.1 下)编译相同代码时收到的奇怪编译错误

python2.7 weatherScript.py 
Traceback (most recent call last):
File "weatherScript.py", line 1, in <module>
    import socket
File "/media/SWAP/weatherData/socket.py", line 117, in <module>
    except socket.error, msg:
AttributeError: 'module' object has no attribute 'error'

相应的代码段是

import socket

import sys

import re

from time import sleep

from xml.dom.minidom import Document

try:

    comSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

except socket.error, msg:

    sys.stderr.write("[ERROR] %s\n" % msg[1])

    sys.exit(1)



#connecting to weather station

try:

    comSocket.connect(())

except socket.error, msg:

    sys.stderr.write("[ERROR] %s\n" % msg[1])

    sys.exit(2)

即使我删除了 try-catch,问题仍然存在。我不确定 Windows 或 Linux 之间是否存在编译不兼容。有什么帮助吗?

其他问题是:我想在 CRONTAB 下运行那个 python 程序,有什么我应该改变或包含的东西,以便我可以将它作为“脚本”或类似的方式运行吗?

非常感谢!

【问题讨论】:

  • 这在 Python 3.1 上不起作用很奇怪,你能分享更多关于你的目录结构和模块组织的信息吗? weatherScript.py 位于哪个目录中,您的sys.path 是什么(或至少与weatherData/socket.py 对应的部分)?

标签: python windows linux compilation


【解决方案1】:

您有一个名为socket 的模块,并且您正尝试从中导入socket 模块。该模块显然隐藏了内置 socket 模块(即您的 socket 正在导入自身)。如果此模块不是包,请将其移至包中。如果/当模块已经在一个包中(我假设 weatherData 是一个包),请确保在任何其他代码之前有以下行:

from __future__ import absolute_import

这确保从模块完成的所有导入都是绝对,即socket 是顶级socket 模块,而您的模块始终通过名称weatherData.socket 访问,因为它是该软件包的一部分,两个模块不会发生冲突。

这仅在weatherData确实是一个包时才有效,如果socket是一个顶级模块,您需要重命名它,或者将它移动到一个包中,否则名称会发生​​冲突,无论是否允许相对导入,您将无法同时使用这两个模块。

【讨论】:

  • 我不太明白你的答案。使用 import socket,我实际上是在关注 python.org 上的套接字文档,它的作用(我相信)是导入内置的套接字模块。该代码在 Windows 上运行良好,但我不知道为什么它不能在 Linux 上运行。
  • weatherData 只是我放置 python 程序的文件夹。
  • 如果你的程序所在目录下有socket.py文件,你不能导入内置的socket模块,因为你的socket.py是遮蔽它。 docs.python.org/tutorial/modules.html
  • 先生,我还有一个问题要问您!所以我的 weatherData.py 应该编写一个 xml 文件,其中包含来自气象站的传感器读数。我遇到的问题是:当我没有那个文件时,我的程序编译并运行完美,但是如果我有那个文件,我的程序会引发奇怪的编译错误。我将通过编辑我的原始帖子来解决错误。
猜你喜欢
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
相关资源
最近更新 更多