我想用 pypy (1.8) 替换默认的 CPython (Python)。
这会导致问题吗?(我问是因为 python 似乎是 Ubuntu 中的一个重要组件。)
我已经构建了 pypy 并将其安装在 Ubuntu 的虚拟机上(我在将它应用到实际机器之前正在测试这个想法。因此,虽然我们可以尝试,但我的目的是在“现实生活中”实现这一点。)。
pypy
与 相比,Pypy 可以在系统中的任何地方使用python
。
pypy my_python_script.py
它似乎安装良好并且可以用。
现在,我想这样,任何时候我想要使用 python,它都会假定我指的是 pypy。
例如,我将 Django 安装到 pypy 中,但当我尝试运行时,django-admin.py
它不知道我在说什么。我想我可以通过将 django-admin.py 添加到我的$HOME
变量中来完成这一部分。
就目前而言,这还不是重点。
所以,我的问题是如何用我自己喜欢的版本(在本例中是 pypy)替换标准 python。
我正在根据目前的答案修改我的问题——完全替换 CPython 不是一个好主意因为它可能会破坏系统。
我读了一些关于 virtualenv 的内容——看起来不错,但它似乎没有回答我的问题(或者,我不知道如何回答)。
我想用 pypy 来处理 Python 工作。开发 Django、Google App Engine 等类似的工作。(我意识到可能存在兼容性问题,我会用单元测试或其他方法解决这些问题。不过,目前这不是重点。)
因此,记住这一点,假设我想使用 pypy 而不是 python。为了./django-admin.py
全局工作,它必须与系统的 python 一起安装。我该如何配置系统以支持来自 pypy 或主系统 python 的这些“全局”python 脚本?
答案1
弄乱系统 Python 并不是一个好主意,因为正如您所注意到的,Ubuntu 广泛使用 Python,因此任何更改都可能导致您的系统不稳定。
此外,作为一名开发人员,我可以告诉你,在你的 Python 系统全局安装第三方库也不是一个好主意——例如,一旦你有两个需要不同版本的 Django 的项目,一切都会开始崩溃。
幸运的是,Python 有非常好的工具来创建完全独立于系统 Python 的隔离环境。
看一下虚拟环境和zc.buildout(与 djangorecipe 一起)为您的问题提供文明的解决方案。:)
更新:简而言之,zc.buildout 将这样解决您的问题:
创建一个目录,将引导程序和buildout.cfg
包含的文件
[buildout]
parts = django
versions = versions
[versions]
django = 1.2.5
[django]
recipe = djangorecipe
settings = development
eggs = ${buildout:eggs}
project = mymegaapp
然后运行/path/to/python/interpreter/python bootstrap.py
,此时 buildout 会“记住”您使用的 Python 解释器。它还会创建一个bin
目录,所有“全局”脚本都会自动生成。然后运行bin/buildout
,它会下载并安装指定版本的 Django,创建一个名为“mymegaapp”的空项目等。完成后,您会在目录中找到相当于 django-admin.py 的django
命令,因此您可以运行bin
bin/django syncdb
bin/django runserver
等等。您永远不必担心记住使用正确的解释器。当然,这只是您可以使用 buildout 完成的一小部分工作……只需考虑将 buildout.cfg 放入 VCS,这样您就可以使用所有依赖项在精确的版本中重新构建应用程序,即使在几年后……或者为不同的“部署配置”设置多个配置 :)
有关如何使用 virtualenv 执行此操作的简单示例,您可以查看在这篇文章中- 除了第一部分之外,这些说明应该有效 - 您需要使用 pypy 安装 setuptools,而不是使用“标准”解释器。然后您将使用python
在沙箱bin
目录中生成的脚本:
cd myapp
../venv/bin/python manage.py runserver 0.0.0.0:8000
(我感觉这个问题与 Ubuntu 越来越不相关...我们应该要求将其迁移到 stackoverflow 吗?)