如何将OS X的Python模块(site-packages)移动到服务器位置?
在我的Mac OS X 10.9 Mavericks电脑上,我安装了Python 2.7.6、PySide 1.2.1和mysql-python 1.2.3(这些都是通过Homebrew和Pip安装的)。因为我在安装任何东西之前就编辑了/etc/paths,让它以/usr/local/bin开头,所以所有的模块都安装在/usr/local/lib/python2.7/site-packages里,而'which python'命令返回的是/usr/local/bin/python。一切运行得很顺利。
有没有办法把这些模块复制到一个服务器的位置,这样其他的OS X机器就可以导入这些模块,而不是在每台OS X机器上都单独安装一遍呢?
1 个回答
我强烈建议使用 Virtualenv 来管理你的 Pip 包。
它可以让你:
- 把不同项目用到的
site-packages
分开管理; - 忽略操作系统自带的
site-packages
,这样在从 OS X 工作站迁移到 Linux 服务器时就不会出现冲突; - 生成一个
requirements.txt
文件,里面列出在某个项目的 Virtualenv 中安装的所有库的确切名称和版本(这个文件会被提交到你的源代码库中)。
最后:
- 可以用一个简单的命令,把整个 Virtualenv 重新安装到另一台机器上(甚至是不同的操作系统)。
当然,有些功能是 Pip 也能提供的,但 Virtualenv 把这些功能放在了一个更安全的环境中。
我在一个 virtualenv 中安装了一些模块,但我该如何把它们放到服务器上?在其他机器上能否不运行 virtualenv 就读取/导入这些模块?
你提到了一些模块,比如 mysql-python,这些模块需要编译成二进制模块,不能在不同的机器之间直接移植。
而其他仅包含 Python 文件的模块,确实可以复制到另一台机器的 site-packages
中。但即便如此,最好还是使用 virtualenv,而不是随便把东西放到服务器的 site-packages
目录里。
在服务器上,你应该安装一个干净的 virtualenv(当然要使用正确版本的 Python),然后根据 requirements.txt
文件,从源代码安装所有需要的模块:
$ mkdir ~/virtualenv
$ python2.x virtualenv.py ~/virtualenv/your_app
$ ~/virtualenv/your_app/bin/pip install -r requirements.txt
virtualenv 的路径只是个建议。你可以在当前机器上生成这个需求文件:
$ pip freeze > requirements.txt