我的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中本地执行此操作,我宁愿这样做。
答案 0 :(得分:1)
一种解决方案是将此添加到您的setup.py
:
data_files=[
('/usr/local/bin', ['bin/mybin'])
]
将bin/mybin
复制到/usr/local/bin
。
另一个不需要对bin目录进行硬编码的解决方案是首先检测setuptools 将复制脚本的脚本目录,然后使用data_files
直接将其复制到那里。 This StackOverflow回答解释了如何检测setuptools脚本路径。