Python setuptools将脚本安装到路径

时间:2018-05-06 22:15:28

标签: python setuptools

我的Python模块包含一个用户可以从命令行执行的外部脚本。我希望用户能够一次性安装Python模块和脚本。使用setuptools,我尝试添加:

@Override
public int maxCapacity() {
    return 3;
}
@Override
public String area() {
    return "10";
}
@Override
public Date whenBuilt() {
    return ***[What should I return here?]***
}

这几乎可以解决问题。它不是将scripts=['bin/mybin'] 添加到用户的路径中,而是添加一个调用mybin的小脚本:

mybin

这种间接导致了一些问题,特别是执行脚本时出现的小延迟(与直接将#!/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python # EASY-INSTALL-SCRIPT: 'myscript==2.0.4','mybin' __requires__ = 'myscript==2.0.4' __import__('pkg_resources').run_script('myscript==2.0.4', 'mybin') 复制到PATH相比)。

有没有办法让setuptools将脚本直接复制到PATH而不是让它间接调用我的脚本?

我的第一个想法是编写一个自定义post-install函数来将脚本复制到用户的路径。但如果有一种方法可以在setuptools中本地执行此操作,我宁愿这样做。

1 个答案:

答案 0 :(得分:1)

一种解决方案是将此添加到您的setup.py

  data_files=[
    ('/usr/local/bin', ['bin/mybin'])
    ]

bin/mybin复制到/usr/local/bin

另一个不需要对bin目录进行硬编码的解决方案是首先检测setuptools 复制脚本的脚本目录,然后使用data_files直接将其复制到那里。 This StackOverflow回答解释了如何检测setuptools脚本路径。