因此,与pip相比,virtualenvsetuptools听起来很棒。能够卸载将是很棒的。但是我的项目已经在使用setuptools,那么如何迁移?到目前为止,我能找到的网站非常模糊和笼统。因此,在阅读了主要网站并尝试了一些内容之后,下面是一些问题选集:


首先,现在virtualenvpip是否应该处于可用状态?如果不是的话,请不要理会其他人,就像疯子一样。
virtualenv应该如何安装?我还不太愿意相信它像explained elsewhere一样令人费解。
是否有一套经过测试的说明,说明如何在虚拟环境中安装matplotlib?由于某种原因,它总是想在这里进行编译而不是仅仅安装软件包,并且它总是以失败而告终(即使在build-dep之后也要占用250 MB的磁盘空间)。一堆警告后,它会显示src/mplutils.cpp:17: error: ‘vsprintf’ was not declared in this scope
两种工具如何与setup.py交互? pip应该代替easy_install,但是尚不清楚是直接关系还是更复杂的关系。
virtualenv是仅用于开发模式,还是用户也应该安装它?
将以最低要求(例如当前的egg)安装生成的软件包,还是将其与所有依赖项的源代码和二进制文件以及所有构建工具一起安装,从而在虚拟环境中创建一个千兆字节的怪兽?
如果生成的程序包安装在虚拟环境中,用户是否需要修改其$PATH$PYTHONPATH来运行该程序包?
是否需要像过去的糟糕时一样为virtualenv创建script from a text string
#egg=Package URL语法是什么?这不是标准URL的一部分,那么为什么不将其作为单独的参数呢?
URL中的@rev包含在哪里?最后,我想,但是文档对此并不清楚(“您还可以在URL中包含@rev”)。
通过使用现有需求文件作为"as a sort of template for the new file"应该理解什么?这可能意味着任何事情。

最佳答案

哇,那是很多问题。他们中的许多人真的应该得到更多细节的自己的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
虚拟环境?因为某些原因
它总是想在这里编译
不仅仅是安装软件包,
而且总是以失败告终(即使
在build-dep之后占用了250 MB
磁盘空间)。经过一堆
打印的警告
src / mplutils.cpp:17:错误:“ vsprintf”
在这方面没有申明。


它“总是希望进行编译”,因为pip在设计上仅从源代码安装,而没有安装预编译的二进制文件。这是一个有争议的选择,并且可能是pip在Python Web开发人员中得到最广泛采用的主要原因,这些Web开发人员使用更多的纯Python程序包,并通常在标准的可工作编译链的POSIX环境中进行开发和部署。

选择设计的原因是,提供预编译的二进制文件会在不同的平台和构建架构(包括python版本,UCS-2与UCS-4 python构建,32与64位...)之间出现组合爆炸问题。 easy_install在大多数情况下都可以在PyPI上找到正确的二进制软件包的方式,但是并不能解决所有这些因素,并且可能会中断。因此,pip完全避免了该问题(将其替换为您必须具有正常的编译环境)。

在许多情况下,需要C编译的软件包的发布时间表也较慢,因此可以为它们简单安装OS软件包也是可以接受的。但是,这不允许在不同的virtualenv中使用它们的不同版本。

我不知道是什么原因导致了您的编译错误,它通过以下一系列命令对我有效(在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


由于matplotlib的unusual download URLs on PyPI,“-f”链接对于获取最新版本是必需的。


两种工具如何互动
setup.py?点子应该取代
easy_install,但不清楚
无论是嵌入式还是更多
复杂的关系。


setup.py文件是Python标准库的程序包管理“解决方案” distutils的约定。仅distutils缺少一些关键功能,而setuptools是广泛使用的第三方程序包,它“包含并扩展”了distutils以提供一些附加功能。 setuptools也使用setup.pyeasy_install是与setuptools捆绑在一起的安装程序。 Setuptools的开发停滞了数年,distribute是setuptools的一个分支,用于修复一些长期存在的错误。最终,通过将分发重新合并到setuptools中来解决了该派生,并且setuptools开发现在再次处于活动状态(使用新的维护程序)。

distutils2distutils的大部分被重写的新版本,试图结合来自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的activateactivate.bat脚本临时修改外壳PATH,因此,virtualenv的bin/目录是第一个。通常,对virtualenv来说,修改PYTHONPATH并不是有用的,也不是必需的。


我是否需要从一个脚本创建脚本
virtualenv的文本字符串,例如
糟糕的过去?


没有。


#egg =包装网址是什么
句法?那不属于
标准网址,为什么不
单独的参数?


“#egg = projectname-version” URL片段黑客最初是introduced by setuptools and easy_install。由于easy_install会从网络上刮除链接,以查找要针对给定软件包名称和版本进行安装的候选发行版,因此该黑客允许软件包作者在PyPI上添加easy_install可以理解的链接,即使他们没有为其文件使用easy_install的标准命名约定也是如此。 。


URL中的@rev包含在哪里?在
我猜到底,但是
文档尚不清楚
(“您还可以在@
URL”)。


在引用的片段后面有几句话,其中有一个指向“阅读the requirements file format以了解其他功能”的链接。 @rev功能已被完整记录并在此处进行了演示。


应该由谁理解
使用现有的需求文件作为
“作为新模板的一种
文件”?这可能意味着任意数量的
东西。


第二句话说:“它将按顺序保留devel-req.txt中列出的软件包并保留注释。”我不确定会有什么更好的简洁描述。

10-07 19:26
查看更多