Python: 没有名为 contextlib 的模块?
有没有人知道我可以在哪里找到这个Python模块'contextlib'?
root@overo:~# python
Python 2.6.6 (r266:84292, Mar 9 2011, 10:05:36)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import contextlib
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named contextlib
我自己并没有编译Python。我只是碰上了这个麻烦。它是在一个基于ARM的CPU上运行,所以可能为了节省空间,有些东西被省略了。
我运行了 find / | grep contextlib
,结果什么都没有找到。
我可以从某个地方下载这个模块,然后直接放到/usr/lib/python2.6里吗?这样可以吗?
8 个回答
根据文档,从2.5版本开始,它就已经是标准库的一部分了。你没有这个库听起来有点奇怪,因为我在2.6.6版本(Ubuntu 10.10)上是可以用的:
blair@blair-eeepc:~$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import contextlib
>>> contextlib.__file__
'/usr/lib/python2.6/contextlib.pyc'
也许有人有更好的建议,但如果真的需要的话,文档顶部有个链接可以查看源代码(这段代码是Python写的,所以你应该可以直接使用,不需要编译什么的)。
编辑:除非,正如Santiago Lezica所建议的,你是手动编译了你的Python版本,这种情况下,只需要把这个模块复制到正确的库路径就可以了。
编辑以更新问题:据我所知,只需把源代码放到Python路径下的某个目录就可以了。你可以把它放在系统库里,但为了避免在未来的更新中被删除、替换或搞坏,我建议把它放在一个单独的目录里,并把这个目录添加到Python路径中。你可以把它放在/usr/local下,或者放在你的家目录里的某个地方。
我遇到了一个不同的错误。
我在Windows 10上使用32位的Python 3.6.5创建了一个pipenv虚拟环境。后来我意识到我需要64位的版本。于是我卸载了32位的,安装了64位的,然后尝试回到我之前创建的虚拟环境。结果发现之前创建的环境出现了奇怪的问题,并给我报了错。
我通过删除旧的pipenv环境 pipenv --rm
,然后用新安装的Python版本创建了一个新的环境,解决了这个问题。
正如其他人提到的,这个模块应该在标准库里,但如果是在嵌入式设备上,可能为了节省空间把它删掉了(如果真是这样,我觉得这很傻,因为不包含contextlib.contextmanager
会让with
语句失去很多强大和方便的功能)
如果你能说出具体的设备或制造商(或者直接问供应商),你可能能得到更好的答案。
至于怎么解决这个问题,可以去下载http://hg.python.org/cpython/file/2.6/Lib/contextlib.py,然后把它放到sys.path
的某个地方就行了(运行python -m site
可以显示你可以使用的目录列表)