我正在尝试使用一个为python 2编写的代码,它可以在python 3.6.0上运行,但它不能在python 3.6.4上运行。它导入IN模块,并使用IN.IP_RECVERR。我试着用谷歌搜索它,但是很难找到一个叫做IN (命名失败?)的模块。为了在REPL中演示,它可以在python 2中工作,但不能在3.6.4中工作:
$ python2
Python 2.7.14 (default, Jan 5 2018, 10:41:29)
[GCC 7.2.1 20171224] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import IN
>>> IN.IP_RECVERR
11
>>>
$ python3
Python 3.6.4 (default, Jan 5 2018, 02:35:40)
[GCC 7.2.1 20171224] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import IN
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'IN'
>>> 在Python3的新版本中,这个IN模块的替代品是什么?
发布于 2018-03-18 03:48:15
这可能是私有的plat-linux/IN.py模块,它从来都不打算使用。删除这些plat-*文件的计划已经有几百万年了,但看起来最终还是在3.6年的issue 28027中实现了。正如在What's New in Python 3.6中提到的
未记录的
IN、CDROM、DLFCN、TYPES、CDIO和STROPTS模块已被删除。它们在特定于平台的Lib/plat-*/目录中可用,但长期过时,跨平台可用且不一致,且未得到维护。创建这些模块的脚本仍然可以在Tools/scripts/h2py.py的源代码发行版中找到。
大多数有用的常量至少在某种程度上是可移植的(例如,您可以预期它们可以在旧笔记本的linux和全新的Galaxy的linux上使用,如果不是在OS X或Solaris上的话),这些常量早就可以通过stdlib中的其他地方获得。
我认为您正在寻找的这个特定的示例并不是完全无用的,但也不足以将其移植到安全的地方,因为linux记录了IP_RECVERR的存在,但没有记录它的价值。因此,您确实需要来自您自己系统的ip标头的版本。
如果您确实需要IN模块,安全的方法是在您需要的特定平台上使用您正在使用的Python版本运行Tools/scripts/h2py.py。这将从系统(或交叉编译目标)上的适当标头生成一个IN.py,然后您可以在该系统上使用它。如果你想发布你的代码,你可能需要在setup.py中加入一个步骤,这样它就会在安装时运行(对于安装了预构造轮的人来说,在构建轮的时候也会运行,但是你可能需要小心确保目标足够具体)。
如果你不需要特别便携,你只需要访问几个脚本中的一个值,你只需要在你的笔记本电脑或你公司的一组相同的容器或类似的东西上部署,你可能会更好地硬编码这些值(用一个很好的吓人的注释来解释细节)。
https://stackoverflow.com/questions/49340297
复制相似问题