即使 __init__.py 退出,Pycharm 也无法识别包

问题描述 投票:0回答:8

这是我的目录结构

--> ProjectDirectory
          -->__init__.py


          --> BaseDirectory
                  -->__init__.py


          --> AnotherBaseDirectory
                  -->__init__.py

          -->program.py

里面

program.py

当我给予

import BaseDirectory

PyCharm 无法识别该包

所有

__init__.py
文件都包含
__all__
变量以及 python 文件名

我做错了什么?

python pycharm
8个回答
16
投票

您可以尝试将根目录标记为 Sources Root。右键单击根目录,然后单击

Mark Directory As -> Sources Root


9
投票

如果我们将

__init__.py
设置为
Text
文件类型,Pycharm 不会对其建立索引。我们需要从
__init__.py
文件类型中删除
Text


4
投票

我的问题是包名中有一个连字符

foo-bar
,这也带来了其他问题。替换为下划线:
foo_bar
立即解决了问题。


1
投票

如果突出显示不适用于

__init__.py
,则意味着 PyCharm 认为它是不同的类型,因此包将无法工作。

文件名模式可以在设置中的

Editor > File Types
部分找到 (
File > Settings
)
__init__.py
可以属于类别,例如文本或
File type auto-detected by file content
。你不需要搜索,只需
__init__.py
放入Python类别
,一切都会好起来的(在抱怨init文件已经在其他类别中之后)。

其他问题可能是包含初始化文件的目录没有正确的名称。如果您坚持使用 PEP8 文件名约定,您一定是安全的,但是这些名称只是可接受的文件名的子集。


0
投票

对于任何遇到这个问题的人,我在 Pycharm 2018 上找到了如下解决方案:

这个想法是以

-m
的方式运行我们的Python代码,而不是这样做

python -m module.a.b arguments

我们愿意

runpy.py module.a.b arguments

根据 runpy 文档,这是脚本

实现了

-m
命令行开关,允许脚本 使用 Python 模块命名空间而不是文件系统进行定位。

以下是我们实际执行的步骤:

  • 找到位于系统内部的

    runpy.py
    。就我而言,我使用的是 centos,
    runpy.py
    位于
    /usr/lib64/python3.6/runpy.py

  • 设置 Pycharm 配置如下:

就我而言,作为模块一部分的脚本是(即

module.a.b
quickstart.cmd.genXML
,脚本的参数是
-p .

这样,我们也可以像往常一样针对脚本调用pycharm内部的python调试器。

参考:


0
投票

这里的答案对我不起作用,但以下答案对我有用(Pycharm 社区 2018.3):

  1. 从 PyCharm 中分离项目
  2. 关闭 PyCharm
  3. 从项目中删除 .idea 文件夹
  4. 启动 PyCharm
  5. 重新打开项目并附加到当前窗口
  6. 突然该项目被识别为包

0
投票

最终为我解决了这个问题,因为

__init__.py
没有关联,因为文本文件将按内容自动检测文件类型,它位于识别的文件类型列表的开头,并从其中删除
__init__.py
名单。


-1
投票

您可以尝试将

ProjectDirectory
添加到路径中。 为此,您必须转到:设置 -> 项目设置 -> 项目解释器,然后您可以按 + 添加到路径中。

© www.soinside.com 2019 - 2024. All rights reserved.