【问题标题】:Calling Python package from command line / PyCharm从命令行/ PyCharm 调用 Python 包
【发布时间】:2016-11-07 21:18:48
【问题描述】:

我正在创建一个 Python 包,我预计它将被命令行和其他脚本调用。这是我的文件结构的简化版本:

GREProject/
    __init__.py
    __main__.py
    Parsing.py

Parseing.py 包含一个方法 parse(),它有两个参数,一个输入文件和一个输出文件。我正在尝试找出“__main__.py”的正确代码,以便从命令行或终端调用以下命令时,参数将传递给“parse()”:

Python GREProject -i input.file -o output.file

我尝试了很多方法,但都失败了,我确实相信我需要解释器的“-m”标志,但我不知道更多。带有标志的示例:

Python -m GREProject -i input.file -o output.file

运行后面的命令时,我收到以下错误:

Import by filename is not supported.

大概来自这一行:

from . import Parsing

【问题讨论】:

    标签: python-2.7


    【解决方案1】:

    好的,原来这是我的 IDE PyCharm 的问题。不知道为什么我会收到此错误,但我已设置修复它:

    Import by filename is not supported.
    

    这里记录一下我在 Pycharm 项目中设置的选项

    Script:
        GREProject
    Script parameters:
        -i .\GREProject\pr2.nyc1 -o .\GREProject\Test.pkl
    Enviroment variables:
        PYTHONUNBUFFERED=1
    Python interpreter:
        Python 2.7.11 (c:\Python27\python.exe)
    Interpreter options:
        -m
    Working directory:
        C:\Users\probert.dan\PycharmProjects
    

    这里是选项的解释:

    • 脚本: 这是要运行的脚本,默认情况下 PyCharm 只会插入对 .py 文件的绝对引用,没有什么可以阻止您手动输入相对引用,在本例中是 GREProjects 文件夹。
    • 脚本参数: 这些被传递给脚本本身,在这种情况下,我告诉我的脚本输入文件是“.\GREProject\pr2.nyc1”,这意味着,查看文件“pr2.nyc1” " 在当前工作目录下的 "GREProject" 目录中。
    • 环境变量:这是由 PyCharm 设置并保持不变。
    • Python 解释器:我的活跃解释器。
    • 解释器选项:这里的选项告诉python我们正在调用一个模块,python然后知道访问“__main__.py”文件。
    • 工作目录:运行脚本的目录,我选择了“GREProject”上面的目录

    这里是我的“__main__.py 文件”的内容供参考:

    from . import Parsing
    import argparse
    
    parser = argparse.ArgumentParser(description='Parse flags.')
    parser.add_argument('-i', help='Import file.')
    parser.add_argument('-o', help='(Optional) Output file.')
    arguments = parser.parse_args()
    Parsing.parse(arguments.i, arguments.o)
    

    还需要注意的是,在 PyCharm 中无法像这样进行调试。下面是调试的解决方案:Intellij/Pycharm can't debug Python modules

    【讨论】:

    • 接受此答案(通过单击复选标记)将将此线程标记为已解决。无需编辑标题 ;-)
    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2015-04-18
    • 2019-03-06
    相关资源
    最近更新 更多