【发布时间】:2014-07-12 19:35:05
【问题描述】:
编辑: 最后我做到了,但是整个过程很痛苦,对于未来的发展,我会明确听取@Martijn Pieters 的建议
我是 python 新手,需要将我在 Windows (cygwin) 机器上做的一些 Python 项目转移到 Linux。该项目使用 ipaddress 模块。我没有 root 访问权限,也没有来自 Linux 机器的 Internet 访问权限,因此无法安装任何东西。所以我已经将我的项目文件(ipfind_v5.py)和我在 cygwin 的 /lib/python2.7/site-packages 目录下找到的 ipaddress.py 模块复制到了一个 Linux 文件夹。问题是当我发出脚本时出现以下错误:
[wakatana@zeus]$ python ipfind_v5.py
Traceback (most recent call last):
File "ipfind_v5.py", line 28, in ?
import ipaddress as IP
File "/home/wakatana/ipfind.py/ipaddress.py", line 28
if b'\0'[0] == 0: # Python 3 semantics
^
SyntaxError: invalid syntax
我换了
if b'\0'[0] == 0:
与
if '\x00' == 0:
但是又发生了另一个错误:
[wakatana@zeus ipfind.py]$ python ipfind_v5.py
Traceback (most recent call last):
File "ipfind_v5.py", line 28, in ?
import ipaddress as IP
File "/home/wakatana/ipfind.py/ipaddress.py", line 1123
except ValueError as exc:
^
SyntaxError: invalid syntax
然后根据https://docs.python.org/2/tutorial/errors.html 这篇关于异常的文章,我做到了:
sed -i 's/ as exc/, exc/' ipaddress.py
在这之后我得到另一个错误(ipaddress模块的来源在这里:https://github.com/phihag/ipaddress/blob/master/ipaddress.py):
[wakatana@zeus ipfind.py]$ python ipfind_v5.py
Traceback (most recent call last):
File "ipfind_v5.py", line 28, in ?
import ipaddress as IP
File "/home/wakatana/ipfind.py/ipaddress.py", line 1173
if isinstance(b, bytes)
^
SyntaxError: invalid syntax
那我重写这部分:
return u'.'.join(_compat_str(struct.unpack('!B', b)[0]
if isinstance(b, bytes)
else b)
for b in _compat_to_bytes(ip_int, 4, 'big'))
进入这个(希望这是uquivalents,似乎代码运行正常):
retval=[]
for b in _compat_to_bytes(ip_int, 4, 'big'):
if isinstance(b, str):
retval.append(_compat_str(struct.unpack('!B', b)[0]))
else:
retval.append(b);
return unicode(".".join(retval))
需要的另外两个步骤: changing bytes to str changing: from . import foo to: import foo
配置:
Linux 版本: Python 2.4.3
Windows (cygwin) 版本: Python 2.7.3
【问题讨论】:
-
你不能。您的选择是升级或移植。
-
好的,那么如何移植ipaddress模块以在2.4.3版本上运行?
-
通过docs.python.org/2/whatsnew了解每个主要版本之间的变化。
标签: python linux cygwin version