python setup.py 配置在自定义目录中安装文件
Posted
技术标签:
【中文标题】python setup.py 配置在自定义目录中安装文件【英文标题】:python setup.py configuration to install files in custom directories 【发布时间】:2012-05-14 13:10:14 【问题描述】:我想创建一个 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
我可以将“包”很好地安装在正确的目录中,因为 --prefix 下的 lib/pythonX.Y/site-packages 是默认位置。但是有没有一种干净的方法可以将 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 文件。
(编辑2)
此外,我可以使用以下内容设置 setup.cfg:
[install]
prefix=/my/prefix
而不是python setup.py install --prefix=/my/prefix
我可以这样做:
python setup.py install
【问题讨论】:
这里有一些有用的文档:docs.python.org/2/install/… 和这里 docs.python.org/3/distutils/introduction.html 【参考方案1】:脚本通过使用设置函数的scripts
参数来处理。对于 libexec,您可以将它们视为数据文件并使用数据选项。
setup(...
scripts=glob("bin/*"),
data_files=[(os.path.join(sys.prefix, 'libexec', 'mypackage'), glob("libexec/*"))],
...
)
我不确定 --prefix
选项如何使用,我从未尝试过。
【讨论】:
谢谢! data_files 为我做了。另一个问题,我可以有一个默认的“前缀”吗?如果用户没有指定一个,我想使用我自己的(而不是 python 默认)。 您可以在 setup.cfg 文件中设置选项默认值。它位于带有节和名称-值对的 .ini 样式选项文件中。命令行选项直接转换为那里的选项(删除--
等)。
如果您打算在setup.py
中使用libexec
,那么在Python 包中的某些文件中引用libexec
的最佳方式是什么? setup.py
可以像 autoconf @libexecdir@
一样进行宏替换吗?以上是关于python setup.py 配置在自定义目录中安装文件的主要内容,如果未能解决你的问题,请参考以下文章
setup.py 拉入非 Python github repos 并将它们放在正确的目录中?
Python setup.py:如何让 find_packages() 识别子目录中的包
我在 setup.py 中需要啥选项才能在正确的目录中创建包?
关于 cmdclass 参数的 pip3 和 `python3 setup.py install` 之间的区别