--install-base 参数在 ./setup.py install 中到底是什么意思?

2 投票
2 回答
1638 浏览
提问于 2025-04-16 13:57

我尝试用自定义的安装方式来安装一个Python模块。

根据文档,我了解到我可以这样做:

python ./setup.py install -f --install-base="/home/hstock/tmp/python" \
                        --install-purelib=modules \
                        --install-scripts=bin \
                        --install-data=data \
                        --install-platlib=modules \
                        --install-headers=include

这样应该会把模块安装到 /home/hstock/tmp/python/modules 这个地方,但似乎 install-base 被忽略了,模块却安装到了 ./modules

这是个bug,还是我理解文档有误呢?

(这是在Ubuntu Lucid上使用的Python 2.6.5)

更新:

我想安装的模块是我自己做的,setup.py 非常简单:

#!/usr/bin/env python

from distutils.core import setup

setup(
    name='ilogtoolbox',
    provides=['ilogtoolbox'],
    version='0.6.3.1',
    packages=['ilogtoolbox'],
    requires=['daemon'],
    scripts=['prunedirs', 'logstoexternal']
    )

相关问题:

2 个回答

0

从文档来看,你好像用得没错。请问这个模块是什么?有可能是模块的作者没有正确使用distutils吗?

1

其实,所有这些 --install-* 的参数都可以接受简单的字符串模板。你可以看看 Python 的标准库中 distutils.command.install 的代码。你会发现默认值像是 '$base/Lib' 或 '$base/Scripts'。

所以对于你的使用情况,它看起来会是这样的:

python ./setup.py install -f --install-base="/home/hstock/tmp/python" \
                        --install-purelib='$base/modules' \
                        --install-scripts='$base/bin' \
                        --install-data='$base/data' \
                        --install-platlib='$base/modules' \
                        --install-headers='$base/include'

而且因为 --install-lib 实际上同时设置了 purelib 和 platlib,所以可以稍微简化一下:

python ./setup.py install -f --install-base="/home/hstock/tmp/python" \
                        --install-lib='$base/modules' \
                        --install-scripts='$base/bin' \
                        --install-data='$base/data' \
                        --install-headers='$base/include'

撰写回答