【问题标题】:pymongo ImportError although it is installedpymongo ImportError 虽然它已安装
【发布时间】:2025-03-07 02:40:01
【问题描述】:

我正在尝试让 pymongo 在我们的 linux 服务器上运行,但是失败了,但我不知道是什么。

我在本地机器 (OsX) 上运行相同的设置

按照建议,我使用 pip 安装了 pymongo:

$ sudo pip install pymongo

Downloading/unpacking pymongo
Downloading pymongo-3.1.tar.gz (462kB): 462kB downloaded
Running setup.py (path:/tmp/pip_build_root/pymongo/setup.py) egg_info for package pymongo

Installing collected packages: pymongo
Running setup.py install for pymongo
building 'bson._cbson' extension
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Ibson -I/usr/include/python2.7 -c bson/_cbsonmodule.c -o build/temp.linux-x86_64-2.7/bson/_cbsonmodule.o
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Ibson -I/usr/include/python2.7 -c bson/time64.c -o build/temp.linux-x86_64-2.7/bson/time64.o
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Ibson -I/usr/include/python2.7 -c bson/buffer.c -o build/temp.linux-x86_64-2.7/bson/buffer.o
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Ibson -I/usr/include/python2.7 -c bson/encoding_helpers.c -o build/temp.linux-x86_64-2.7/bson/encoding_helpers.o
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -Wl,-z,relro -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/bson/_cbsonmodule.o build/temp.linux-x86_64-2.7/bson/time64.o build/temp.linux-x86_64-2.7/bson/buffer.o build/temp.linux-x86_64-2.7/bson/encoding_helpers.o -o build/lib.linux-x86_64-2.7/bson/_cbson.so
building 'pymongo._cmessage' extension
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Ibson -I/usr/include/python2.7 -c pymongo/_cmessagemodule.c -o build/temp.linux-x86_64-2.7/pymongo/_cmessagemodule.o
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Ibson -I/usr/include/python2.7 -c bson/buffer.c -o build/temp.linux-x86_64-2.7/bson/buffer.o
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -Wl,-z,relro -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/pymongo/_cmessagemodule.o build/temp.linux-x86_64-2.7/bson/buffer.o -o build/lib.linux-x86_64-2.7/pymongo/_cmessage.so

Successfully installed pymongo
Cleaning up...

所以你认为 pymongo 已安装,但 Python 无法识别:

$ python -c "import pymongo"

Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named pymongo 

也在 python 本身中:

$ python
Python 2.7.9 (default, Nov  3 2015, 14:21:40) 
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymongo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pymongo
>>> exit()

有人知道吗?我的mac上没有这个问题

$ python -V
Python 2.7.9

【问题讨论】:

  • 你在同一台机器上安装了两个版本的 Python 吗?
  • 是的,2.7 和 3.4
  • 我的机器上有类似的东西,我想你为 3.4 版安装了 pymongo。按照 Dex 说明 (python setup.py install),您明确调用了 2.7 的 setup.py 脚本。

标签: python pip pymongo


【解决方案1】:

尝试从源安装它:

$ git clone https://github.com/mongodb/mongo-python-driver.git pymongo
$ cd pymongo/
$ python setup.py install

不要忘记它的依赖:

sudo apt-get install build-essential python-dev

【讨论】:

  • 非常感谢!这就像一个魅力,知道为什么 pip 安装失败了吗? (仅供个人学习)
  • 安装问题不是源代码的主题。依赖关系在特定包的setup.py 中使用“install_requires”配置正确定义,所以也许这就是原因。
  • 看来您最初为 3.4 版安装了 pymongo。按照@Dex 说明,您现在也为 Python 2.7 安装了它。
  • 但是macOS没有apt-get,不知道homebrew的“build-essential”对应的包名是什么?