【问题标题】:Create a PyCharm configuration that runs a module a la "python -m foo"创建一个运行模块的 PyCharm 配置,例如“python -m foo”
【发布时间】:2014-03-31 14:57:19
【问题描述】:

我的 python 入口点需要作为模块(而不是脚本)运行,如下所示:

python -m foo.bar

以下内容不起作用(并且不应该):

python foo/bar.py

如何在 pycharm 中创建一个运行配置,使用上面的第一个调用来运行我的代码?

【问题讨论】:

标签: python pycharm


【解决方案1】:

根据man python-m 选项

-m 模块名称
在 sys.path 中搜索命名模块并将相应的 .py 文件作为脚本运行。

所以大多数时候您只需在“项目”工具窗口中右键单击bar.py,然后选择Run bar

如果您确实需要使用-m 选项,则将其指定为解释器选项,模块名称为编辑配置对话框中的脚本:

【讨论】:

  • 这不起作用,因为我使用“from future import absolute_import”,然后我使用“from .import foo”。
  • 哦,好的。我已经更新了处理该案例的答案。
  • 有机会从远程解释器运行它吗?
  • 这对运行模块有效,但在调试时无效。如果我单击调试图标而不是运行图标,则会收到错误 No module found。
  • 这仅在运行应用程序时有效。但是,分析失败并显示“不支持按文件名导入”。为了使分析工作,您需要下面的“runpy.py”技巧
【解决方案2】:

我为我的脚本使用了一种解决方法,它确实使用了相对导入。

python -m 实际上调用了一个名为 runpy.py 的脚本,它是标准 Python 安装的一部分。这两个调用是等价的:

python -m my_module.a.b module_arguments
python python_lib_directory/runpy.py my_module.a.b module_arguments

使用后一种方法来设置您的运行/调试配置:

脚本: python_lib_directory/runpy.py

脚本参数: my_module.a.b module_arguments

解释器选项:(留空,不需要 -m)

【讨论】:

  • 很棒的技巧,这也让你可以使用 pycharm 的 profiling 选项!
  • 这仍然对我不起作用。我仍然得到错误:找不到模块。这与我使用 Conda 管理环境(包括 PyCharm)这一事实有关吗?
  • 对于 PyCharm 2017.3.2(专业版),@andrewdotn 的答案适用于Run,但不适用于Debug。您的回答可以同时适用于RunDebug
  • 在我的 Ubuntu 安装中,脚本位于:./usr/lib/python*/runpy.py
  • 如果我想调试algo2.py怎么办? C:\Python36\Scripts\pylivetrader.exe run algo2.py
【解决方案3】:

在 PyCharm 2016 中,不带脚本路径指定 -m 不起作用,因为它们使用不接受 -m 参数的包装脚本。

这是我的解决方案,适用于运行和调试配置:https://github.com/amnong/misc/tree/master/pycharm_runner

编辑:我刚刚阅读了 J. R. Petrus 的评论,我的解决方案非常相似。顺便说一句,我也尝试使用pkg_resources 支持正确的入口点,但由于某种原因pkg_resources.load_entry_point() 找不到我的项目的分布...

【讨论】:

    【解决方案4】:

    IntelliJ IDEA / PyCharm 2017

    在最新版本的 JetBrains IDE 中,“脚本”字段是可选的。在“脚本参数”中指定-m foo.bar就足够了:

    【讨论】:

    • 谢谢!这是一个很棒的更新。这应该是新接受的答案。
    • 在 PyCharm 2017.3.1(专业版)中似乎不起作用,显然是因为 PyCharm 实际上调用 /Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py 有很多选项,包括 --file XXX 使用你的 --file -m解决方案。
    【解决方案5】:

    在 2018.1 中,终于可以在 UI 中指定模块名称而不是脚本路径。在输入字段的左侧有一个用于更改它的下拉菜单。

    【讨论】:

    • 这应该是公认的答案。 @alexflint 我建议您更改已接受的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2019-09-04
    • 1970-01-01
    • 2022-12-11
    • 2013-03-02
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多