自定义Django(或任何Python模块)的安装位置

时间:2009-10-29 12:59:14

标签: python django distutils

我想将Django安装到自定义位置,我已阅读distutils documentation并且它建议我应该能够执行以下操作以安装在我的主目录下(从一个解压缩的django tarball)。

> python setup.py install --home=~/code/packages/install --install-purelib=modules --install-platlib=modules --install-scripts=scripts --install-data=data 

但是,每次运行时,它似乎都不会将主路径与单独的元素路径连接起来,所以我最终只能使用

modules/
scripts/
data/ 

在解压缩的tar ball目录中。即它似乎将模块,脚本等视为本地目录的相对路径而不是相对于指定的--home。

我尝试使用--prefix设置root,并使用setup.cfg,似乎没有任何工作。 --prefix和--home自己没有其他覆盖工作,但与--install-xxx一起使用时覆盖它不会。

我要么做一些蠢事,要么文档错了,或者他们是个bug。任何帮助都很大。

4 个答案:

答案 0 :(得分:2)

我强烈建议您查看VirtualenvPip来创建python包的基本孤岛。

Pinax project现在专门用它来捆绑需求以供其他人使用,并且它在可重用的应用程序空间中越来越成为事实上的标准。

答案 1 :(得分:1)

好的,所以我一直在查看distutils源代码以查看发生了什么 - distutils.command.install执行所有路径名操作。

事实证明文档实际上是不正确的。每当提供--install-xxxx样式选项时,它都会完全覆盖可能从--home--prefix派生的任何值 - 代码会对路径进行任何简单的连接

然而,它所做的是对一组特殊变量的变量替换。我特别感兴趣的是$base。在命令行上使用它可以定义覆盖,并且distutils将使用为--home等指定的内容替换所有出现的内容。但请注意,您必须引用文件名,以便BASH不尝试将其扩展为环境变量。

所以我最初的命令行变为:

python setup.py install --home=/home/andre/code/packages/install --install-purelib='$base/modules' \
  --install-platlib='$base/modules' --install-scripts='$base/scripts' --install-data='$base/data'

希望我以外的人发现有用!

答案 2 :(得分:0)

作为快速检查,我建议更换

~/code/packages/install

/full_path_to_your_user/code/packages/install

答案 3 :(得分:0)

如果您只想在主目录中使用它,则根本不需要安装它。只需确保容器目录位于某个地方的python路径上,然后将django / bin中的脚本移动到主PATH上的某个位置(或将该目录添加到路径中)。