【问题标题】:Creating python module with command line arguments使用命令行参数创建 python 模块
【发布时间】:2015-05-06 18:07:09
【问题描述】:

我已经将一个 python 模块上传到 pypi 并在本地安装了该模块:

pip install microarray_quantilenorm

我正在尝试使用传递参数在命令行上运行模块。

当我直接从站点包调用 python 脚本时,一切正常。

python /site-packages/microarray_quantilenorm/microarray_quantilenorm.py *csv

但是打电话:

python -m microarray_quantilenorm.__main__ *csv

或者:

python -m microarray_quantilenorm *csv

结果:

/anaconda/bin/python: No module named microarray_quantilenorm.__main__

我无法确定 setup.py、我的 __init__.py 或其他地方是否存在问题。谢谢。

【问题讨论】:

    标签: python pip


    【解决方案1】:

    __main__.py 的全部意义在于它是当包作为模块运行时运行的文件。换句话说,只做python -m microarray_quantilenorm,而不是python -m microarray_quantilenorm.__main__

    不过,通常情况下,还有更好的解决方案。假设您使用的是setuptools,而不是尝试手动完成整个混乱,请使用console_scripts entry point。这将使安装过程自动创建一个名为 microarray_quantilenorm 的脚本并将其安装在您的 binscripts 目录中,该目录可以正确加载包并运行其主要代码(或者,如果您愿意,可以使用其他一些里面的代码)。

    【讨论】:

    • console_scripts的语法问题,调用脚本应该用什么语法?使用 microarray_quantilenorm=microarray_quantilenorm:main 会导致错误。
    • @user2277435:见the docs。但首先,你还记得引文吗?其次,main 是要调用的 函数 的名称。你的microarray_quantilenorm.__main__main 功能吗?如果这还不足以提供帮助,我建议您创建一个新问题,您可以在其中包含详细信息,例如它会导致什么错误以及您在哪里放置了什么。
    • 是的,无法根据文档查看使用哪种语法,但它在 setup.py 中用引号调用。是的,我的 python 脚本包含一个 main 函数。如果我在更多时间后无法解决,我将作为一个单独的问题发布。再次感谢您。
    • @user2277435:我在答案中链接的文档只是一个最小的例子,但是我在评论中链接的文档(我希望也应该从其他文档的某个地方链接)有一点更多信息。
    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 2020-05-05
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多