如果有人使用 Python virtualenv,他知道我们可以在自己的环境中运行脚本,安装所有必要的库,这不会影响主要的 python 发行版。
在 Linux (Debian) 世界中我们是否有类似的make
实用工具?
- 情况 1:我下载了源代码并且我知道我需要什么依赖项。我将库放在主目录中的某个位置,并明确告诉
make
实用程序在哪里搜索它们。 - 情况 2:我为实用程序运行某种 virtualenv
make
,并在那里调用,apt-get install lib-required-dev
因此下载的库将放置在这个虚拟环境中,并且不会污染我的操作系统。然后我就跑了make
。
答案1
情况一相对简单,至少对于某些程序来说是这样。大多数源代码包都包含一个configure
脚本,用于检查所需库的可用性。这些脚本通常具有指定搜索路径的选项。例如--lib-prefix
。这样,您甚至不需要自己修改 Makefile。现在这是否有效将取决于依赖关系的复杂程度,但值得一试。
对于选项 2,您有以下chroot
程序:
chroot - run command or interactive shell with special root directory
chroot
需要存在某些文件和目录。详细信息将取决于您到底需要做什么(例如您需要吗/dev
?您需要吗/proc
?)。你可以获得chroot
这样的最小环境(作为 root):
mkdir foo
cp -r /bin /lib /lib64 foo/
chroot foo
最后一个命令会将您移至该目录foo
并运行默认 shell,将其foo
视为/
.我所概述的程序是一种简化。/lib
例如,您不需要所有内容。根据您想要执行的操作,您可能还需要更多目录。最后,您还可以使用mount bind
将目录链接到chroot
环境中,但如果您希望它完全独立于您的真实操作系统,则不可以。
创建这样一个游乐场的一个简单方法是选择一个小分区并在该分区上安装一个最小的系统。然后你可以简单地进行chroot
类似的操作(始终以 root 身份):
mount /dev/sda2 foo/
chroot foo/
显然,更改sda2
为您安装最小系统的分区。有关更多信息,请参阅以下链接:
答案2
terdon的回答是正确的。
另一种更复杂但更持久的方法是实际创建一个虚拟环境(virtualbox 是我的选择。)使用您正在使用的操作系统的基本/标准版本创建一个新的虚拟机,保存状态该机器,然后开始安装任何依赖项,就像在常规系统上一样。完成编译后,您可以将虚拟机重置回原始状态。
值得注意的是,虽然您绝对可以在远程服务器环境中执行此无头操作,但在本地计算机(或具有转发的 X 会话的远程计算机)上创建虚拟机要容易得多。一旦您拥有了一个良好的基础虚拟机,如果您知道如何访问,则可以导出虚拟机。