从任意VCS仓库安装Python模块的最佳实践
我对Python的生态系统还不是很熟悉,有个关于模块编辑的问题。
我使用了很多第三方模块,这些模块在PyPi上可以找到。因为我之前是做C和Java的,所以我特别喜欢用easy_install <whatever>
这个方式来安装模块。这是一个全新的、很棒的世界,但当我想要编辑新安装的模块时,遇到了两个问题:
egg
文件可能存放在文件系统中某个奇怪的文件夹或压缩包里。- 使用
egg
似乎不允许我使用原始项目的版本控制系统,就像使用debian包时不能从原始的版本控制系统仓库进行开发一样。
从任意版本控制系统仓库安装模块的最佳实践是什么?我希望在其他脚本中继续使用import foomodule
。如果我修改了模块的源代码,是否需要执行额外的命令?
4 个回答
你可以使用 PYTHONPATH
这个环境变量,或者把你的代码链接到 site-packages 目录里的某个地方。
Pip 是一个工具,可以让你通过提供一个网址来安装文件,这个网址可以是 Subversion、git、Mercurial 或 bzr 的仓库。
pip install -e svn+http://path_to_some_svn/repo#egg=package_name
举个例子: pip install -e hg+https://rwilcox@bitbucket.org/ianb/cmdutils#egg=cmdutils
如果我想下载最新版本的 cmdutils。(这是我随便选择的一个包)。
我把这个安装在一个虚拟环境里(使用 -E 参数),然后 pip 就把 cmdutils 安装到了我的虚拟环境文件夹的 src 文件夹里。
pip install -E thisIsATest -e hg+https://rwilcox@bitbucket.org/ianb/cmdutils#egg=cmdutils
$ ls thisIsATest/src
cmdutils
你想开发一个项目,但希望系统能把这个开发版本当成一个“蛋”(egg)来处理吗?比如说,想要获取入口点?如果是这样的话,你可以查看源代码,并通过使用开发模式来实现,方法是:
python setup.py develop
如果你的项目不是基于setuptools的,那就不能使用上面的方法,不过你可以用这个命令作为快速解决方案:
python -c "import setuptools; execfile('setup.py')" develop
关于setuptools(easy_install的基础)几乎所有你想知道的内容都可以在setuptools文档中找到。此外,还有easy_install的文档。
开发模式会像easy_install一样,把你的项目添加到导入路径中。你所做的任何更改,下次你的应用程序导入这个模块时都会生效。
正如其他人提到的,如果你只是想获取当前最新版本而不需要编辑,你也可以直接使用版本控制的URL,但这样只会获取一个快照,并且在这个过程中确实会创建一个普通的“蛋”。我知道它支持Subversion,其他的我记得也支持,但我找不到相关的文档。