Python ImportError:没有名为spwd的模块
有人能帮忙吗?我不明白为什么我会看到这个 我试图使用Python中的Python ImportError:没有名为spwd的模块,python,python-2.7,osx-elcapitan,Python,Python 2.7,Osx Elcapitan,有人能帮忙吗?我不明白为什么我会看到这个 我试图使用Python中的spwd模块。我刚刚导入了它,但在运行时看到了这一绝对意外的错误: Traceback (most recent call last): File "./library/system_users.py", line 25, in <module> import spwd ImportError: No module named pwd 回溯(最近一次呼叫最后一次): 文件“/library/system_users
spwd
模块。我刚刚导入了它,但在运行时看到了这一绝对意外的错误:
Traceback (most recent call last):
File "./library/system_users.py", line 25, in <module>
import spwd
ImportError: No module named pwd
回溯(最近一次呼叫最后一次):
文件“/library/system_users.py”,第25行,在
导入spwd
ImportError:没有名为pwd的模块
我认为它应该是默认可用的
Python 2.7.10pip 8.1.1来自/Library/Python/2.7/site-packages(Python 2.7)
OS X El Capitan 10.11.4 我知道有时候
pip安装——升级pip
会有帮助。不幸的是,现在不行
谢谢您的预付款。您应该使用
Anaconda是一个完全免费的Python发行版(包括用于商业用途和重新发行)。它包括400多个最流行的Python包,用于科学、数学、工程和数据分析。请参阅Anaconda附带的软件包和Anaconda变更日志
之后,只需键入:
conda install spwd
正如您在对这个问题的评论中所猜测的,
spwd
是一个函数,因此它通常是在编译Python时构建的。出于这个原因,我猜您正在使用的系统(即OS X 10.11)不支持spwd
,除非构建您安装的Python版本的人出现配置错误或手动禁用该模块
然而,我们可以做的不仅仅是猜测。在构建Python时,许多特定于系统的配置都在名为
setup.py
的脚本中处理。对许多内置模块的支持在PyBuildExt
类的detect\u modules
方法中确定;该函数包含以下代码(取自)
if(config_h_vars.get('HAVE_GETSPNAM',False)或
config_h_vars.get('HAVE_getspend',False)):
append(扩展名('spwd',['spwdmodule.c']))
其他:
缺少.append('spwd')
我们可以看到,只有当config\u h\u var
具有HAVE\u GETSPNAM
或HAVE\u getspend
时,函数才会将扩展名'spwd'
(由spwdmodule.c
组成)添加到扩展名列表中。config\u h\u vars
中的字符串对应于编译前运行Python的configure
脚本时生成的pyconfig.h
头文件中定义的宏
根据使用pyconfig.h
文件生成的注释,如果系统具有getspname
功能,则定义HAVE\u GETSPNAM
,如果系统具有getspend
功能,则定义HAVE\u getspend
问题是OSX10.11(以及似乎较新版本的macOS)没有这两种功能。(gnulib手册证实了这一点,尽管它是针对较旧版本的Mac OS X。请参阅和。)因此,在OS X/macOS上编译Python时,spwd
未构建,因此当您尝试在该系统上导入时,会看到一个ImportError
建议从Anaconda安装
spwd
。当然,这是不可能的,因为spwd
是一个内置模块,而不是您希望从软件包管理器安装的软件包。我也没有在PyPI或任何Anaconda频道上看到spwd
包
然而,由于Python似乎并不阻止您安装名为spwd
的模块(至少当您没有内置的spwd
时),因此可以想象您可以安装某种为macOS制作的插入式替换spwd
。macOS和iOS使用/etc/master.passwd
而不是/etc/shadow
,但可能仍然可以使某些功能正常工作
不幸的是,在撰写本文时,macOS似乎还没有这样的替代品。我会将任何需要spwd的软件视为与macOS不兼容。@dooms-对不起,你是什么意思?我没有使用RPM Linux。尝试在我的脚本中使用此Python模块,但无法导入它。仅在我的MacBook上开发。你安装了模块pwd吗?@HarshDattani当然没有。我认为它应该在默认情况下可用,例如
grp
或pwd
模块。如果现在在OS X上正确使用Python模块(还有另一个Python模块管理器),可以吗?其他人能证明/同意吗?另外,我在远程Debian服务器上执行了我的脚本。它在那里工作得很好,因为有一个模块。别担心,Anaconda是一个众所周知的发行版。