我在 VSCode 中使用 Python 和 Pylance 扩展。
在我正在编辑的自己的包中,自动添加的导入(设置“导入格式:绝对”)如下所示:
from mydirectory.myfile import myclass
但是,我的 Python 包正在被被一个(非常愚蠢且不可协商的)外部系统消耗,该系统拒绝正确解释它,除非导入的格式特别像:
from mypackage.mydirectory.myfile import myclass
那么我如何强制 VSCode 以确切的格式自动完成这些导入?
I已经尝试了许多与导入、格式化、Python、Pylance 等相关的 VSC 设置,但到目前为止,它们都没有达到我的需要。我怀疑也许需要一些手动强制的前缀? (我只有一个包,因此最好使用特定字符串对这样的前缀进行硬编码。)
很不幸,VSCode 和 Pylance 没有直接的设置可以强制从当前包导入时始终添加包名前缀。
不过,你可以尝试以下几种方法来解决这个问题:
1. 使用代码格式化工具并配置其规则:
-
autopep8:
autopep8 默认不会添加包名前缀,但你可以使用
--aggressive
参数多次运行它来尝试达到目的。例如:bash autopep8 --aggressive --aggressive myfile.py
- YAPF: YAPF 也可用于格式化代码,但它也没有直接添加包名前缀的选项。你可能需要自定义其样式规则来实现这一点。
2. 使用代码生成工具:
- 你可以编写一个简单的脚本,扫描你的 Python 文件,识别来自当前包的导入,并自动添加包名前缀。
3. 创建自定义的 VSCode 扩展:
- 这是一个更复杂的选择,但它可以为你提供最大的灵活性。你可以创建一个 VSCode 扩展,监听代码完成事件,并在需要时添加包名前缀。
4. 修改外部系统(如果可能):
- 最好的解决方案是修改外部系统,使其能够正确解析不带包名前缀的导入。如果可以修改外部系统的代码或配置,这将是最干净和最持久的解决方案。
一些额外的建议:
-
确保你的包结构符合 Python 的规范,并且
__init__.py
文件存在于每个包目录中。 -
在你的项目中使用
setup.py
文件,并使用find_packages()
函数来正确定义你的包结构。
希望这些方法能帮助你解决这个问题。
标签:python,visual-studio-code,import,autocomplete From: 78779795