Python 2.7 从命令行/PyCharm调用Python包

Python 2.7 从命令行/PyCharm调用Python包,python-2.7,Python 2.7,我正在创建一个Python包,我预计它将被命令行和其他脚本调用。以下是我的文件结构的简化版本: GREProject/ __init__.py __main__.py Parsing.py py包含一个方法parse(),它接受两个参数,一个输入文件和一个输出文件。我正在尝试找出“\uuuu main\uuuuuuuuuuy.py”的正确代码,以便在从命令行或终端调用以下内容时,参数将传递给“parse()”: 我尝试过很多方法,但都失败了,我相信我需要翻译的“-m”标

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

GREProject/
    __init__.py
    __main__.py
    Parsing.py
py包含一个方法parse(),它接受两个参数,一个输入文件和一个输出文件。我正在尝试找出“\uuuu main\uuuuuuuuuuy.py”的正确代码,以便在从命令行或终端调用以下内容时,参数将传递给“parse()”:

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

Python -m GREProject -i input.file -o output.file
运行后面的命令时,我收到以下错误:

Import by filename is not supported.
大概是从这一行:

from . import Parsing

好吧,原来这是我的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”,这意味着,请查看当前工作目录下“GREProject”目录中的文件“pr2.nyc1”
  • 环境变量:这是由PyCharm设置的,保持不变
  • Python解释器:我的活动解释器
  • 解释器选项:这里的选项告诉python我们正在调用一个模块,然后python知道如何访问“\uuuu main\uuuuu.py”文件
  • 工作目录:运行脚本的目录,我选择了“GREProject”上面的目录
以下是我的“\uuuu main\uuuuu.py文件”的内容供参考:

还需要注意的是,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
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)