PyCharm:为什么 `audio` 成为首选?

PyCharm: Why does `audioop` get prefered?

如果我想导入 reverse(),为什么 audioop 更受欢迎?

我的代码包含 from django.urls import reverse 已经在很多文件中。

为什么 PyCharm 不查看我的其他文件,然后将当前的第二个选项设为第一个?

我这辈子都没用过模块audioop

Why does audioop get preferred, if I want to import reverse()?

audioop是内置模块,所以它的存根文件audioop.py存在于PyCharm的python_stubs.

PyCharm 只是按字母顺序列出自动导入建议。
PyCharm 按类别列出自动导入建议,在每个建议中按字母顺序排列:

  1. 当前文件中导入的已知引用(更多信息请参见下面的部分)
  2. 第一方模块
  3. 内置模块←audioop属于这里
  4. 第三方模块←django属于这里
  5. pip._vendor 个模块

My code contains from django.urls import reverse already in many files.

Why does PyCharm not look my other files and then make the currently second option the first one?

PyCharm根本没有实现这样的推理机制。

PyCharm 确实优先考虑当前文件中导入的已知引用,但有一些注意事项(更多信息请参见下面的部分)。

解决方法

I have never used the module audioop in my whole life.

您可以安全地删除文件,或者只更改文件扩展名(例如 audioop.txt)。

当您在 PyCharm 中重新打开项目时,它将重新生成。

当前文件中导入的已知引用

PyCharm 优先考虑当前文件中导入的已知引用,但有一些注意事项。

例如,如果您在该文件中有 from django.urls.base import get_script_prefix,那么 PyCharm 会建议 reverse() from django.urls.basedjango.urls 公开),因为它知道 reversedjango.urls.base.

警告:不建议导入引用。
例如,from django.urls import path(如果您在 urls.py 工作)并不建议 reverse() from django.urls,因为 reverse 是导入引用(即跳转到 django.urls.reverse会直接把你带到 django.urls.base.reverse,因为 django/urls/__init__.py 只是从 django.urls.base 导入了 reverse)。

解决方法:为导入添加别名,然后将其分配给原始名称。
例如将django/urls/__init__.py中的import由reverse修改为reverse as _reverse,然后定义变量reverse = _reverse.

  • 此解决方法的注意事项:PyCharm 提示这是一个 v 变量而不是 f 函数。

    解决方法:包装函数。

    def reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None):
        return _reverse(viewname, urlconf=urlconf, args=args, kwargs=kwargs, current_app=current_app)