【发布时间】:2015-05-11 09:46:00
【问题描述】:
我使用 PyCharm/IntelliJ 社区版本来编写和调试 Python 脚本,但现在我正在尝试调试 Python 模块,而 PyCharm 做了错误的命令行指令解析,导致执行错误,或者我的配置错误。
这是我的运行/调试配置:
这是在我运行模块时执行的(这里没有问题):
/usr/bin/python3.4 -m histraw
但是当我调试时,这是 IntelliJ 控制台中的输出:
/usr/bin/python3.4 -m /opt/apps/pycharm/helpers/pydev/pydevd.py --multiproc --client 127.0.0.1 --port 57851 --file histraw
/usr/bin/python3.4: Error while finding spec for '/opt/apps/pycharm/helpers/pydev/pydevd.py' (<class 'ImportError'>: No module named '/opt/apps/pycharm/helpers/pydev/pydevd')
Process finished with exit code 1
如您所见,参数解析错误,在-m 选项之后,在模块名称之前传递了一个 IntelliJ 调试脚本。
我也试过把-m histraw放在Script字段中,但不起作用,那个字段只是放Python脚本路径,而不是模块。
有什么想法吗?
【问题讨论】:
-
您到底想通过使用 -m 参数而不是直接运行脚本来实现什么?据我了解, -m 开关旨在使运行标准库模块变得容易;它对您自己的脚本没有任何好处。
-
因为我正在编写一个可分发的命令行脚本,它可以作为可执行命令行工具安装在您的系统
PATH中,带有setuptools 和pip 工具。当您在 Python 中编写真正的命令行时,setuptools使用新的独立脚本将其安装在您的系统环境中,并且此脚本将您的原始脚本作为模块调用。这在代码运行时可能看起来无害,但实际上并非如此,因为“环境”发生了变化,并且代码的某些部分可能会做出不同的反应,特别是模块导入语句或对 sys.* 包的调用等。跨度> -
那么为什么不创建一个 setuptools 将创建的脚本的副本,然后从 PyCharm 运行配置中运行该脚本呢?
-
也许可行,但它是任何 IDE 的基本要求,即无需更改程序运行方式即可运行和调试程序的能力。此外,将这个功能添加到 PyCharm 看起来非常简单,就像在调试时更改执行参数顺序一样。无论如何,谢谢,我会尽快测试你的“hack”。
-
修复 PyCharm 确实没有什么难的。但是,在任何情况下,找到让您继续工作的解决方法比发布包含修复程序的更新版本的 PyCharm 更快。
标签: python debugging intellij-idea pycharm python-module