setup.py并将文件添加到/ bin /


70

我无法弄清楚如何使setup.py添加一个纸条给用户/bin或/usr/bin或什么的。

例如,我想添加一个myscript.py,/usr/bin以便用户可以myscript.py从任何目录调用。


试试这个例子。默认情况下,python setup.py install将my_project安装到中/usr/local/bin。要删除安装,请运行python setup.py install --record files.txt,它会生成files.txt,然后通过以下rm
— 方式

Answers:


35

Python文档在“安装脚本”部分下对其进行了说明。

脚本是包含Python源代码的文件,旨在从命令行启动。

setup(...,
      scripts=['scripts/xmlproc_parse', 'scripts/xmlproc_val']
)

如前所述这里,脚本旁边,有一个entry_points机制,这是更多的跨平台。

使用entry_points您选择的功能连接命令行工具名称,而scripts可以指向任何文件(例如,shell脚本)。


3
这似乎将文件放入Pythonbin目录(在Mac上/opt/local/Library/Frameworks/Python.framework/Versions/3.1/bin/),但是我仍然无法运行它们。
— 亚伦·尤代肯

4
aharon,取决于您如何安装3.1,可能必须更改您的PATH目录才能使其bin目录中的脚本正常运行。有关执行此操作的说明,请参见上一个问题的答案。
— 安德鲁

这也适用于非Python脚本的脚本。不幸的是,如果在bin目录中也列出了任何内容,那么它也将包括bin目录中的纯数据文件在内的所有内容视为可执行文件。
— CMCDragonkai

67

考虑使用console_scripts:

from setuptools import setup
setup(name='some-name',
      ...
      entry_points = {
              'console_scripts': [
                  'command-name = package.module:main_func_name',                  
              ],              
          },
)

main_func_name主模块中的主要功能在哪里。command-name是将其保存在/ usr / local / bin /中的名称(通常)


1
如果正在运行pip3 install --editable .,它将安装到命令/home/{username}/.local/bin。如果运行sudo pip3 install --editable .,它将命令安装到/usr/local/bin/
— jmcgrath207 '18

在Mac上,这也会安装到框架目录(/Library/Frameworks/Python.framework/Versions/3.7/bin对我而言),但不会安装在/usr(我pip和所在的python位置)下
— jalanb

19

有两种方法可以从setuptools和PyPI基础结构中获取有效的命令行工具:

  1. “脚本”关键字参数
    允许在命令行中执行所需的所有内容,它可以是Python脚本,shell脚本或完全不同的东西。
  2. “ console_scripts”入口点
    允许将Python函数(不是脚本!)直接注册为命令行可访问工具。

las,第一种方法会将可能具有“ .py”扩展名的脚本放入bin目录,并且(我认为)脚本没有针对virtualenvs进行调整。丑陋。最好使用console_scripts。
— 克里斯·科格登

@Chris Cogdon,.py扩展名不是必需的,至少对于* nix系统不是(我在文件顶部确实有一个shebang)。您对虚拟环境表现不佳是正确的-您必须转到环境的bin目录中以找到您的可执行文件。但是您可以从那里运行它。
— Ben Ogorek

14

如果您愿意构建和安装整个python软件包,这就是我的处理方式:

  • 在setup.py中编辑setup()函数以包含一个名为scripts的参数,并将其参数设置为您希望从任何地方运行的文件的位置。例如

setup(name='myproject',author='',author_email='',scripts=['bin/myscript.py'])

  • 在包含setup.py的目录中,通过键入以下内容创建bin目录 mkdir bin
  • 将myscript.py添加到此新创建的bin目录(并确保其可执行!)
  • cd 再次进入包含setup.py的目录,然后通过输入安装整个python包 python setup.py install
  • 安装软件包后,您应该可以在系统上的任何位置运行myscript.py!

如果我想省略py扩展名怎么办?顺便说一句,在bin目录中添加源代码的做法有些疑问
— DataGreed 2012年

@DataGreed如果您想省略.py扩展名......,则忽略它:),只要该文件是可执行文件,就可以省略该扩展名,而您可以简单地从命令行运行myscript。原谅我的天真,但是为什么在bin目录中添加源代码还是有问题的?
— wh1tney 2012年

这是一个非常非常奇怪的决定。Bin应该包含构建而不是源。
— DataGreed 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.