PyCharm:Py_Initialize:无法初始化sys标准流

38

我想使用 PyCharm IDE,但是我的程序甚至包括简单的 Hello World 都无法编译。PyCharm 给出了以下错误:

Fatal Python error: Py_Initialize: can't initialize sys standard streams
Traceback (most recent call last):
  File "C:\Python34\lib\io.py", line 72, in <module>
AttributeError: 'module' object has no attribute 'ABCMeta'
Process finished with exit code 3

我找不到解决方法,也查看了链接PyDev: Fatal error Python32\lib\io.py, line 60, in <module>,但是那里没有解决方案。

我的Win 7操作系统上安装了Python 3.4。


25
请将文件名从 io.py 改为其他名称。 - Burhan Khalid
6
问题已解决。显然 PyCharm 不能执行名为 abc.py 的文件,因为 Python 中有一个内置模块叫做 abc。通过命令行执行 abc.py 可以正常工作。请检查你的文件是否命名为 abc.py,如果是,请将其重命名为其他名称。 - iridescent
@BurhanKhalid,你能详细解释一下为什么会出现这个问题以及如何避免吗?我找不到“保留文件名”或类似的列表。 - Hedrack
3
我有一个类似的问题。早些时候,我将我的包命名为“io”。 - lab bhattacharjee
6个回答

84

我遇到了同样的问题,因为我创建了一个名为 abc.py 的文件,请在您的项目中删除该文件,您的错误将消失。


为什么PyCharm不支持文件名abc.py? - HarshitMadhav
12
如果您将文件命名为abc.py,那么您就会覆盖标准库的abc (抽象基类)。这样做后,所有依赖于内置abc的内容都将使用您的文件。除非您实质上重新编写了标准库的代码,否则程序就会出错。请注意避免这种情况发生。 - Ernst
回应@david-c,更改模块名称可能有效,但这并不是必要的。在“运行/调试”配置中取消选中几个框是更好的解决方案。 - Keith Ma
它对我来说运行良好。 - Mugeesh Husain
显然,在使用PyInstaller时出现了相同的问题,而这个答案救了我。 - Samudra Ganguly

18

是的,正如您在评论中所说,问题出在文件名“abc”上。如果您取消选中以下内容,则可以在PyCharm中运行此文件:

  • 将内容根添加到PYTHONPATH
  • 将源根添加到PYTHONPATH

在“运行/调试配置”菜单中。


这是对我有效的方法。我认为它应该成为被接受的答案。不应该有像“abc.py”这样的魔法禁止模块名称。 - philologon
还值得检查一下,确保“工作目录”选项没有指向您的文件或子包。 - David C
在我的情况下,这是因为内容根目录是通过 pip install -e . 安装到我的本地环境中的软件包。 - user2015762
这对我没有帮助。有趣的是,在我的情况下,只有在调试中才会出现这个错误。 - Anton Daneyko
我为此浪费了整个下午,所以感谢您发布这个答案。 - solvingJ

15

我遇到了同样的问题,你只需要将文件名从io.py更改为其他名称,它就可以工作了!


这很奇怪。我不得不重命名我的一个包,它的名称是io,当调试(仅在调试时)时它就无法工作!更改为inout后一切正常。 - MatBos
哈哈,我也把一个模块命名为“io”了。 - havryliuk

7

最终找到了在PyCharm中解决这个问题的方法:永远不要使用像abc.py或者test.py这样的名称。

只需要使用另一个名称,例如a.py或者my-unique-file-name.py就可以了。


这很奇怪。Python标准库非常庞大,而Python本应是面向初学者的,所以普通程序员不会预料到他们的模块名称与标准库冲突。 - julaine

2
尝试以下操作: 文件 -> 设置 -> 编辑器 -> 文件编码 将项目编码更改为UTF-8

0
在我的情况下,from .my_file import * 导致了错误。将其更改为 from .my_file import func_1, func_2, func_3 解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接