哇,这真是一大堆问题。他们中的许多人真的应该得到更多细节的自己的 SO 问题。我会尽力的:
首先是virtualenv和pip
应该处于可用状态
现在?
是的,尽管它们不能满足每个人的需求。 Pip 和 virtualenv(以及 Python 包管理中的所有其他内容)远非完美,但它们仍然被广泛使用和依赖。
virtualenv 应该如何安装?
我还没准备好相信它是
如其他地方解释的那样令人费解。
您链接的答案很复杂,因为它试图避免对您的全局 Python 安装进行任何更改,而是将所有内容安装在 ~/.local 中。这有一些优点,但设置起来更复杂。它还安装了virtualenvwrapper,这是一组用于使用 virtualenv 的便捷 bash 脚本,但对于使用 virtualenv 不是必需的。
如果你在 Ubuntu 上,aptitude install python-setuptools 后跟 easy_install virtualenv 应该可以让你安装一个有效的 virtualenv 而不会对你的全局 python 环境造成任何损害(除非你还安装了 Ubuntu virtualenv 包,我不推荐因为它可能是旧版本)。
有没有经过测试的指令集
了解如何将 matplotlib 安装在
虚拟环境?因为某些原因
它总是想在这里编译它
而不是仅仅安装一个包,
它总是以失败告终(即使
在占用 250 MB 的 build-dep 之后
磁盘空间)。经过一大堆
它打印的警告
src/mplutils.cpp:17:错误:'vsprintf'
未在此范围内声明。
它“总是想编译”,因为 pip 在设计上只从源代码安装,它不安装预编译的二进制文件。这是一个有争议的选择,并且可能是 pip 在 Python Web 开发人员中得到最广泛采用的主要原因,他们使用更多的纯 Python 包,并且通常在工作编译链是标准的 POSIX 环境中开发和部署。
选择设计的原因是提供预编译的二进制文件在不同平台和构建架构(包括 python 版本、UCS-2 与 UCS-4 python 构建、32 位与 64 位...)下存在组合爆炸问题。 easy_install 在 PyPI 上找到正确的二进制包的方式大部分时间都有效,但没有考虑所有这些因素并且可能会中断。所以 pip 完全避免了这个问题(用你有一个工作编译环境的要求来代替它)。
在许多情况下,需要 C 编译的软件包的发布时间表也较慢,因此只需为它们安装 OS 软件包是可以接受的。但是,这不允许在不同的 virtualenvs 中使用它们的不同版本。
我不知道是什么导致了您的编译错误,它适用于我(在 Ubuntu 10.10 上)使用这一系列命令:
virtualenv --no-site-packages tmp
. tmp/bin/activate
pip install numpy
pip install -f http://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.0.1/matplotlib-1.0.1.tar.gz matplotlib
“-f”链接是获取最新版本所必需的,因为 matplotlib 的 unusual download URLs on PyPI。
这两种工具如何与
设置.py? pip 应该替换
easy_install,但不清楚
无论是插入式还是更多
关系复杂。
setup.py 文件是 Python 标准库的包管理“解决方案”distutils 的约定。 distutils 单独缺少一些关键特性,而 setuptools 是一个广泛使用的第三方包,它“包含并扩展”了 distutils 以提供一些附加特性。 setuptools 也使用 setup.py。 easy_install 是与 setuptools 捆绑在一起的安装程序。 Setuptools 的开发停滞了好几年,distribute 是 setuptools 的一个分支,用于修复一些长期存在的错误。最终,通过将distribute 合并回setuptools 解决了分叉问题,并且setuptools 开发现在再次活跃(使用新的维护者)。
distutils2 是distutils 的大部分重写的新版本,它试图整合来自 setuptools/distribute 的最佳想法,并且应该成为 Python 标准库的一部分。不幸的是,这项努力失败了,所以目前 setuptools 仍然是 Python 打包的事实标准。
Pip 取代了easy_install,但它没有取代setuptools;它需要 setuptools 并在它之上构建。因此它也使用setup.py。
virtualenv 是否仅用于开发
模式,或者用户也应该安装
是吗?
对此没有唯一的正确答案;它可以使用任何一种方式。最后,这实际上是您的用户的选择,理想情况下,您的软件应该能够安装在 virtualenv 内部或外部;尽管您可能会选择记录并强调一种方法或另一种方法。这在很大程度上取决于您的用户是谁以及他们可能需要将您的软件安装到什么环境中。
生成的包会是
安装最低
要求(如当前的鸡蛋),
或者它会与源代码一起安装吗?
所有依赖项的二进制文件加上所有
构建工具,创建一个千兆字节
虚拟环境中的怪物?
如果需要编译的包是通过 pip 安装的,则需要从源代码编译。这也适用于任何需要编译的依赖项。
这与你是否使用 virtualenv 的问题无关。 easy_install 默认在 virtualenv 中可用,并且在那里工作得很好。它可以安装预编译的二进制鸡蛋,就像在 virtualenv 之外一样。
用户是否必须修改他们的
$PATH 和 $PYTHONPATH 运行
生成的软件包,如果它安装在
虚拟环境?
为了使用安装在 virtualenv 中的任何东西,您需要使用 virtualenv 的 bin/ 目录中的 python 二进制文件(或安装到 virtualenv 中引用此二进制文件的另一个脚本)。最常见的方法是使用 virtualenv 的 activate 或 activate.bat 脚本临时修改 shell PATH,因此 virtualenv 的 bin/ 目录是第一个。修改 PYTHONPATH 通常对 virtualenv 没有用处或没有必要。
我是否需要从
virtualenv 的文本字符串,如
过去的日子不好过?
没有。
#egg=Package URL 是什么
句法?这不属于
标准网址,为什么不是
单独的参数?
“#egg=projectname-version”网址片段破解最初是introduced by setuptools and easy_install。由于 easy_install 从 Web 上抓取链接以查找要为给定包名称和版本安装的候选发行版,因此该 hack 允许包作者在 PyPI 上添加 easy_install 可以理解的链接,即使他们没有使用 easy_install 的标准命名约定文件.
@rev 包含在 URL 的什么位置?在
我想结束了,但是
文档对此并不清楚
("你也可以在
网址”)。
在引用的片段之后的几句话有一个链接可以“阅读the requirements file format以了解其他功能”。 @rev 功能已在此处完整记录和演示。
应该理解的内容
使用现有的需求文件作为
“作为一种新的模板
文件”?这可能意味着任意数量的
东西。
下一句说“它将保持 devel-req.txt 中列出的包的顺序并保留 cmets。”我不确定什么是更简洁的描述。