这是我的目录结构
--> ProjectDirectory
-->__init__.py
--> BaseDirectory
-->__init__.py
--> AnotherBaseDirectory
-->__init__.py
-->program.py
里面
program.py
当我给予
import BaseDirectory
PyCharm 无法识别该包
所有
__init__.py
文件都包含 __all__
变量以及 python 文件名
我做错了什么?
您可以尝试将根目录标记为 Sources Root。右键单击根目录,然后单击
Mark Directory As -> Sources Root
我的问题是包名中有一个连字符
foo-bar
,这也带来了其他问题。替换为下划线:foo_bar
立即解决了问题。
如果突出显示不适用于
__init__.py
,则意味着 PyCharm 认为它是不同的类型,因此包将无法工作。
文件名模式可以在设置中的
Editor > File Types
部分找到 (File > Settings
)
__init__.py
可以属于类别,例如文本或 File type auto-detected by file content
。你不需要搜索,只需将__init__.py
放入Python类别,一切都会好起来的(在抱怨init文件已经在其他类别中之后)。
其他问题可能是包含初始化文件的目录没有正确的名称。如果您坚持使用 PEP8 文件名约定,您一定是安全的,但是这些名称只是可接受的文件名的子集。
对于任何遇到这个问题的人,我在 Pycharm 2018 上找到了如下解决方案:
这个想法是以
-m
的方式运行我们的Python代码,而不是这样做
python -m module.a.b arguments
我们愿意
runpy.py module.a.b arguments
根据 runpy 文档,这是脚本
实现了
命令行开关,允许脚本 使用 Python 模块命名空间而不是文件系统进行定位。-m
以下是我们实际执行的步骤:
找到位于系统内部的
runpy.py
。就我而言,我使用的是 centos,runpy.py
位于 /usr/lib64/python3.6/runpy.py
设置 Pycharm 配置如下:
就我而言,作为模块一部分的脚本是(即
module.a.b
)quickstart.cmd.genXML
,脚本的参数是-p .
。
这样,我们也可以像往常一样针对脚本调用pycharm内部的python调试器。
参考:
这里的答案对我不起作用,但以下答案对我有用(Pycharm 社区 2018.3):
最终为我解决了这个问题,因为
__init__.py
没有关联,因为文本文件将按内容自动检测文件类型,它位于识别的文件类型列表的开头,并从其中删除__init__.py
名单。
您可以尝试将
ProjectDirectory
添加到路径中。
为此,您必须转到:设置 -> 项目设置 -> 项目解释器,然后您可以按 + 添加到路径中。