Lui*_*lli 6 intellij-idea pycharm
我使用许多共享命名空间的python包(setuptools支持它).这些与使用setuptools的python 2.7配合得很好.我的问题是关于IntelliJ的PyCharm插件:它没有完全识别包的文件和成员.
假设我有很多包:
第一包:
cantrips
+--- types
| +--- ...
+--- patterns
| +--- ...
+--- (more subpackages here)
+--- entropy.py
+--- (more *.py files here)
Run Code Online (Sandbox Code Playgroud)
第二包:
cantrips
+--- watch
+--- ...
Run Code Online (Sandbox Code Playgroud)
如果我尝试在里面导入任何东西cantrips.watch或者cantrips.entropy我没有任何问题(这在Python27中完美运行).然而,IntelliJ IDEA 13中的Pycharm插件似乎无法cantrips.entropy通过代码检查找到.
问:如何才能正确地使IntelliJ/PyCharm理解命名空间的每个部分?
我正在使用 PyCharm 2019.1 并且我找到了一种方法来做到这一点(它可能符合解决方法)
命名空间包的技巧在于,一个包分布在多个目录中,一旦您理解了这一事实,那就非常容易了。
通常,对于 PyCharm,内容根目录或项目根目录设置为您在其中打开项目的目录(普通包的默认值),因为它不需要命名空间包。这让 PyCharm 感到困惑,因为它为解释器设置相应的结构来设置 PYTHONPATH。
要纠正命名空间包的此问题,只需将具有命名空间文件夹的所有目录添加到内容根即可。
File -> Settings -> Project Structure -> Add Content Root
Run Code Online (Sandbox Code Playgroud)
所以如果你有一个结构
rootdir/
+--dist_package1/
+--namespace/
+--file1.py
+--dist_package2/
+--namespace/
+--file2.py
Run Code Online (Sandbox Code Playgroud)
不要将“Content Root”目录设置为,而是将其设置为包含、和等rootdir所有目录。namespacedist_package1dist_package2
删除原来设置为 的内容根目录rootdir。
这应该修复对命名空间包的未解析引用
更新(2019 年 7 月 25 日):
您可以右键单击dist_package1并dist_package2选择
Mark Directory As -> Sources Root
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您的导入问题
这些包是否位于单独的项目中?
我想我也遇到了同样的问题,并已向 JetBrains 提交了支持票。
如果在第二个包中,您可以导入 cantrips.entropy 但在代码主体中,如果代码检查无法解析 cantrips.entropy,例如:
import cantrips.entropty
def my_func():
cantrips.entropy.do_stuff()
...
Run Code Online (Sandbox Code Playgroud)
IDE 抱怨 my_func 中的“熵”未通过以黄色突出显示来解析。
一些解决方法是使用 alais:
import cantrips.entropty as cantrips_entropty
def my_func():
cantrips_entropy.do_stuff()
...
Run Code Online (Sandbox Code Playgroud)
或者使用“from import”语法:
from cantrips.entropty import do_stuff
def my_func():
do_stuff()
...
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |