2010-06-06 49 views
5

我对Python生态系统很陌生,并且对模块编辑有疑问。从任意VCS存储库安装python模块的最佳实践

我使用一堆第三方模块,分布在PyPi上。来自C和Java背景,我喜欢easy_install <whatever>的易用性。这是一个新的,美好的世界,但该模型打破了,当我想编辑新安装的模块有两个原因:

  1. egg文件可以存储在一个文件夹或归档的文件系统中的某个疯狂英寸
  2. 使用egg似乎排除使用原始项目的版本控制系统,就像使用debian软件包阻止源于原始VCS存储库的开发一样。

从任意VCS存储库安装模块的最佳做法是什么?我希望能够在其他脚本中继续使用import foomodule。如果我修改模块的源代码,我是否需要执行任何其他命令?

回答

2

你想开发,但开发版本被系统处理为鸡蛋(例如获取入口点)吗?如果是这样,那么你应该检查出的来源和做用Development Mode:如果项目恰好不是一个setuptools的基础项目,这是需要针对上述情况,一个快速的解决办法是此命令

python setup.py develop 

python -c "import setuptools; execfile('setup.py')" develop 

几乎所有你想知道的一切setuptools的(easy_install的基础)可从该setuptools docs。还有docs for easy_install

开发模式将项目添加到导入路径中,方式与easy_install相同。下次导入模块时,您所做的更改将可用于您的应用程序。

正如其他人所提到的,如果您只想获取最新版本而无需编辑,您也可以直接使用版本控制URL,但这只会拍摄快照,并且确实会创建一个正常的蛋过程的一部分。我知道它确实是Subversion,我认为它做了其他,但我找不到文档。

+0

完美,正是我想要的:)谢谢。 – fmark 2010-06-07 01:40:30

1

您可以使用PYTHONPATH environment variable或将代码符号链接到站点包中的某个位置。

+0

我到底加了什么“PYTHONPATH”?包含“__init __。py”的文件夹? – fmark 2010-06-06 23:44:49

1

easy_install安装的软件包通常来自开发人员版本控制的快照,通常在开发人员发布正式版本时进行。因此,您将不得不通过easy_install进行方便的自动下载,并通过版本控制进行最新的代码更新。如果选择后者,则可以通过运行python setup.py install直接从版本控制检出中构建并安装在python包索引中看到的大多数包。

如果您不喜欢默认安装目录,则可以改为安装到自定义位置,并导出PYTHONPATH环境变量,其值是已安装软件包的父文件夹的路径。

+0

我选择后者的选项。如果我反复修改源代码,是否需要在每次修改后重新运行'python setup.py install',或者只修改一次? 'python setup.py install'是做什么的? – fmark 2010-06-07 00:08:57

+0

这取决于包装。如果一个软件包被设计为可用于新版本控制而无需构建/安装步骤,那么您可以将“PYTHONPATH”指向签出目录的父目录。否则,在安全导入之前,您将不得不构建并安装它。 'python setup.py install'告诉一个用setuptools或distutils构建的包来构建它自己,并将这些构建的文件安装到系统通常位置,以便加载python包。这里是一些文档:http://docs.python.org/distutils/ – 2010-06-07 00:13:38

3

Pip可让您安装文件,提供Subversion,git,Mercurial或bzr存储库的URL。

pip install -e svn+http://path_to_some_svn/repo#egg=package_name 

例子: 如果我想下载最新版本的cmdutils PIP安装-e汞柱+ https://[email protected]/ianb/cmdutils#egg=cmdutils

。 (随机包我决定拉)。

我将其安装到virtualenv(使用-E参数)中,并且pip将cmdutls安装到我的virtualenv文件夹顶层的src文件夹中。

pip install -E thisIsATest -e hg+https://[email protected]/ianb/cmdutils#egg=cmdutils 

$ ls thisIsATest/src 
cmdutils 
+1

这下载到源代码到哪里?如果我修改'svn'下载的源代码,我是否需要运行任何命令? – fmark 2010-06-07 00:23:14

+0

我已经更新了我的答案和更多信息(包括对该问题的回答) – RyanWilcox 2010-06-07 01:28:35