在另一台机器上安装相同的Python环境
我在我的桌面上开发一个Python项目(操作系统是OS X),运行得很好。现在我需要在一个运行Linux的计算集群上运行它,但我没有管理员权限。在这个计算集群的Home目录下,我本地安装了Anaconda。可是当我在那儿运行我的项目时,出现了很多奇怪的错误和问题。而在我的桌面上,代码运行得很好。所以我想,可能是因为Anaconda的模块版本比我桌面上的新,这可能导致了这些错误(向后兼容性问题)。
有没有办法在计算集群上使用和我桌面上一样的Python模块版本呢?
我在想,是否有一个命令可以列出我桌面上所有的包和模块及其版本,然后把这个文件导入到那个Linux机器上的某个工具里,这样我就能得到一个和我桌面上设置一模一样的环境。有没有这样的东西呢?
2 个回答
使用 pyenv 来管理 Python 版本
pyenv 是一个工具,可以让你在自己的电脑上安装 Python,而不需要管理员权限(当然,即使有管理员权限,使用它也是个好主意)。它允许你在自己的文件夹中使用指定的 Python 版本,而不是系统自带的版本。你还应该安装 pyenv virtualenv,这样你就可以为你的项目使用虚拟环境(虽然不是绝对必要,但虚拟环境是个好主意,建议你总是使用一个,使用 pyenv 创建虚拟环境几乎没有难度)。
pyenv 有个很方便的命令叫 pyenv local
,它可以指定某个文件夹(以及子文件夹)使用哪个 Python 版本(或者哪个虚拟环境)。一旦你在项目文件夹里用 pyenv local
设置了 Python 版本,之后每次你使用 python
命令时,它都会使用你通过 pyenv local
设置的版本。如果你只安装了一个 Python 版本,并且不使用虚拟环境,那就不需要这个命令(在这种情况下,你可以用 pyenv global
来为用户设置版本)。pyenv 的本地和全局设置最棒的地方在于,它对脚本和手动调用 Python 都很好用,设置后就可以忘记它,和其他需要激活的 Python 环境管理工具相比,简单多了。
简而言之,一旦你设置好 pyenv,你就可以完全控制运行哪个版本的 Python,而且因为它安装在你的个人文件夹里,操作系统无法干扰它。
安装好 pyenv 和 pyenv virtualenv 后,你可以用它来安装和你开发机器上相同的 Python 版本,你需要运行的命令大概是这样的:
pyenv install 3.4.2
pyenv virtualenv 3.4.2 my_project_env
cd my_project
pyenv local my_project_env
在 Python 环境中安装模块
要查看 Python 模块的版本列表,可以使用 pip freeze
,你可以在你的开发机器上这样做:
pip freeze > requirements.txt
现在把 requirements.txt
文件复制到你的部署机器上(确保已经用 pyenv local
或 pyenv global
设置好环境),然后运行:
pip install -r requirements.txt
这将会把相同的模块安装到 Python 环境中。
复制一个 pyenv
虽然这样做有点冒险,但一旦你完成了这个步骤,你甚至可以把整个安装(也就是至少 .bashrc
文件和 .pyenv
文件夹)复制到其他机器上。如果这些机器的操作系统相同,并且个人文件夹的名字也一样,那么复制过来的环境应该可以正常工作。虽然使用设置脚本可能更稳妥,但我曾经在没有出现严重问题的情况下复制过 pyenv 环境。