我有一个在早期版本的 python (3.8) 下编写的脚本。
当我现在运行该脚本时,该脚本会因堆栈跟踪而崩溃:
python .\ec2_mongo.py
Traceback (most recent call last):
File "C:\Users\tdun0002\OneDrive - Synchronoss Technologies\Desktop\important_folders\Jokefire\git\jf_cloud_scripts\aws_scripts\python\aws_tools\ec2_mongo.py", line 11, in <module>
from pymongo import MongoClient, errors
File "C:\Users\tdun0002\OneDrive - Synchronoss Technologies\Desktop\important_folders\Jokefire\git\jf_cloud_scripts\aws_scripts\python\aws_tools\venv\lib\site-packages\pymongo\__init__.py", line 87, in <module>
from pymongo.collection import ReturnDocument
File "C:\Users\tdun0002\OneDrive - Synchronoss Technologies\Desktop\important_folders\Jokefire\git\jf_cloud_scripts\aws_scripts\python\aws_tools\venv\lib\site-packages\pymongo\collection.py", line 20, in <module>
from bson.code import Code
File "C:\Users\tdun0002\OneDrive - Synchronoss Technologies\Desktop\important_folders\Jokefire\git\jf_cloud_scripts\aws_scripts\python\aws_tools\venv\lib\site-packages\bson\code.py", line 18, in <module>
from bson.py3compat import abc, string_type, PY3, text_type
ImportError: cannot import name 'abc' from 'bson.py3compat'
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我仅使用 bson 包中的 ObjectId。这是我的导入行:
from bson.objectid import ObjectId
Run Code Online (Sandbox Code Playgroud)
ObjectId我从包中使用的代码bson如下所示:
def insert_doc(mydict):
_, _, instance_col = set_db()
mydict["_id"] = ObjectId()
instance_doc = instance_col.insert_one(mydict)
if __name__ == "__main__":
message = "* MongoDB Insert Document *"
banner(message, "*")
message = f"MongoDB record inserted: {instance_doc.inserted_id}"
banner(message)
return instance_doc
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这在 3.8 下有效,但我在 3.9.1 下得到了堆栈跟踪。我怎样才能让它在新版本下工作?
这可能是由于版本不匹配造成的。
尝试做:
pip uninstall bson
pip uninstall pymongo
pip install pymongo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3366 次 |
| 最近记录: |