python IN软件包的替代品是什么?



我正在尝试使用为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'
>>> 

在较新版本的python 3中,这个IN模块的替代品是什么?

这大概是私有plat-linux/IN.py模块,从未打算使用。几年来一直有计划删除这些plat-*文件,但看起来它最终发生在 28027 的 3.6 期中。如 Python 3.6 中的新增功能中所述:

未记录的INCDROMDLFCNTYPESCDIOSTROPTS模块已被删除。它们已在特定于平台的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中加入一个步骤来做到这一点,所以它将在安装时运行(对于安装预构建轮子的人来说,在车轮制造时间运行,但你可能需要小心确保目标足够具体)。

如果你不需要特别便携,你只需要访问几个脚本中的一个值,你只部署在笔记本电脑或你公司的一组相同的容器或类似的东西上,你可能最好硬编码这些值(有一个很好的吓人评论解释细节)。

相关内容

  • 没有找到相关文章

最新更新