【问题标题】:making a python package behave as a native cli app使 python 包表现得像本机 cli 应用程序
【发布时间】:2014-11-12 20:00:22
【问题描述】:

我有一个 python 包,我可以在命令行中使用它

python -m pkgname [args]

我想赋予它原生的行为(在 linux 上)

pkgname [args]

我该怎么做?

【问题讨论】:

    标签: python linux command-line


    【解决方案1】:

    使用shebang。

    也许像把它放在脚本的第一行:

    #!/usr/bin/env python
    

    您还必须使用chmod +x pkgname.py 使其可执行并使其可用于路径。

    【讨论】:

      【解决方案2】:

      您可以通过在包文件的开头添加#!/usr/bin/python 来使用shebang 行!然后通过在终端中运行chmod +x pkgname.py 使您的包可执行!

      您也可以使用alias 作为替代答案:

      alias pkgname="python -m pkgname"

      【讨论】:

      • 如果没有pkgname.py这样的文件,只有pkgname目录怎么办?
      • 你的意思是你的文件名是pkgname而不是pkgname.py?
      • 有一个名为pkgname 的文件夹,其中包含一个用于cli 解析的__main__.py
      • “公认的方法是使用一个简短的脚本来简单地调用主脚本——这样你就可以调用一个脚本,而不是一个模块。
      【解决方案3】:
      $ sudo chmod a+x pkname.py
      $ ln -s $(pwd)/pkgname.py /usr/bin/pkgname
      

      这确实与 python 无关(第一行使其可执行...第二行将其映射到路径上的某个位置

      确保 pkname.py 的第一行是

      #!/usr/bin/env python
      

      【讨论】:

      • 如果pkgname 是包含__init__.py、__main__.py 和其他脚本的目录,这将如何变化。
      • 它根本不应该......我不认为
      • #!/usr/bin/env python 如果你的 python 没有碰巧在 /usr/bin/python 中(它可能在 /usr/local/bin 中,它可能是 virtualenv 等,那么它是一个更好的 shebang ...)
      【解决方案4】:

      你可以写一个setup.py script 来安装这个包。编写好 setup.py 后,您可以在本地安装包

      python setup.py install
      

      或以无数种方式(嗯,少于无数种)构建包,然后将它们复制到所需的机器上。现在的打包热是python+pip+wheels,所以

      python setup.py bdist_wheel 
      

      创建一个名称包含多个细节的文件,查看 dist/*.whl 以找出它是什么。然后在目标机器上

      pip intall path/to/the/crazily-named.whl
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-30
        • 2022-06-23
        • 2013-02-08
        • 1970-01-01
        • 1970-01-01
        • 2014-11-04
        相关资源
        最近更新 更多