python setup.py配置在自定义目录中安装文件

时间:2012-05-05 01:57:03

标签: python configuration installation setup.py

我想创建一个setup.py,它会将我的文件安装到自定义目录中。我有一个特定的前缀,我希望得到以下结果:

/my/prefix/
  bin/
    script.sh
  libexec/
    one.py
    two.py
    ...
  lib/pythonX.Y/site-packages/
    package/...

我的初步项目如下:

/
  script.sh
  one.py
  two.py
  ...
  setup.py
  package/...
    __init__.py
    ...

实现这一目标的最佳方法是什么?我希望以后可以安装它:

python setup.py install --prefix=/my/prefix

我可以将“package”很好地安装在正确的目录中,因为lib / pythonX.Y / site-packages下的--prefix是默认位置。但有没有一种干净的方法将script.sh变成“bin”和其他python文件到“libexec”?我认为实现这一目标的唯一方法是在我的setup.py脚本中手动复制这些文件。可能有更干净,更标准的方法吗?

(编辑)

解决方案

我最终得到了setup.py:

setup(name='mylib',
  scripts=['script.sh'],
  data_files=[('libexec', ['one.py', 'two.py'])]
)

当然,你可以迭代libexec的所有python文件,但我只需要2-3个python文件。

(EDIT2)

此外,我可以使用以下内容设置setup.cfg:

[install]
prefix=/my/prefix

而不是python setup.py install --prefix=/my/prefix我可以这样做:

python setup.py install

1 个答案:

答案 0 :(得分:9)

通过使用设置功能的scripts参数来处理脚本。对于libexec,您可以将它们视为数据文件并使用数据选项。

setup(...
    scripts=glob("bin/*"),
    data_files=[(os.path.join(sys.prefix, 'libexec', 'mypackage'), glob("libexec/*"))],
    ...
)

我不确定如何使用--prefix选项,我从未尝试过。