Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ImportError:没有名为spwd的模块_Python_Python 2.7_Osx Elcapitan - Fatal编程技术网

Python ImportError:没有名为spwd的模块

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

有人能帮忙吗?我不明白为什么我会看到这个

我试图使用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.py”,第25行,在
导入spwd
ImportError:没有名为pwd的模块
我认为它应该是默认可用的

Python 2.7.10
pip 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是一个众所周知的发行版。