导入错误:没有名为'secrets'的模块 - 在 Digital Ocean 拉取后,python manage.py 命令无法运行

7

我正在跟随一门课程学习Django开发和部署。
将其推送到Digital Ocean后,所有其他步骤都非常顺利。直到我尝试运行python manage.py help命令。

(env) djangoadmin@ubuntu-1:~/pyapps/btre_project_4$ python manage.py help

我遇到了这个错误。

Traceback (most recent call last):


File "manage.py", line 21, in <module>
    main()
   File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 377, in execute
    django.setup()
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/__init__.py", line 16, in setup
    from django.urls import set_script_prefix
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/urls/__init__.py", line 1, in <module>
    from .base import (
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/urls/base.py", line 9, in <module>
    from .exceptions import NoReverseMatch, Resolver404
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/urls/exceptions.py", line 1, in <module>
    from django.http import Http404
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/http/__init__.py", line 2, in <module>
    from django.http.request import (
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/http/request.py", line 10, in <module>
    from django.core import signing
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/core/signing.py", line 45, in <module>
    from django.utils.crypto import constant_time_compare, salted_hmac
  File "/home/djangoadmin/pyapps/env/lib/python3.5/site-packages/django/utils/crypto.py", line 6, in <module>
    import secrets
ImportError: No module named 'secrets'

我是新手,已经卡在这个问题上一段时间了。我只想知道可能会导致这种情况的原因是什么。

2个回答

9

secrets 模块是在 Python 3.6 版本中添加的。您的主机使用的是 Python 3.5,因此无法使用 secrets 模块。您需要一个安装了 Python 3.6+ 的主机,或者一个不依赖于 secrets 模块的 Django 版本。


刚刚检查了一下:Python 3.5.2。更改主机还是Django更容易?如果我更改了Django版本,似乎需要对项目进行大量更改 - 或者我错了。 - Chief
搞定了 - 使用Python 3.6的主机。 - Chief
1
今天我在使用Python 3.9时遇到了同样的错误,有人有什么想法吗? - chocolatte
@chocolatte 请再次确认您正在运行代码的 Python 版本是否符合预期,并且您自己的代码中没有 secrets.py 文件可能会导致问题。如果您确定它是由 Python 3.6+ 执行的,请打开一个新问题并包含 完整 的错误回溯信息。 - snakecharmerb

1

我也遇到过同样的问题,解决方法是指定我已安装的Python版本。例如:

$ python3
>>> import secrets
>>> secrets.token_hex(16)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接