使用自制软件处理 pip(easy_install) 的建议方法?

Dra*_*uan 5 python homebrew easy-install pip

我知道有brew-gembrew-pip但它仍然很容易混淆。假设我的 Mac OS X 是 10.7.2。

  • 据我所知,Python 模块至少有 3 个位置(假设为 2.7):
    1. /System/Library/Frameworks/Python.framework/Versions/2.7/
    2. /Library/Python/2.7/site-packages
    3. /usr/local/lib/python2.7/site-packages/(在自制软件中控制)
  • 对于某些 Python 模块,将它们pip安装到2,即所谓的本地/自定义 Python 模块位置,一切看起来和运行都很好。当然,readline的通过的easy_installIPython的建议我安装的readline通过easy_install的,而不是PIP
  • 对于某些人来说,它会尝试将一些杂项文件(例如,man,doc,...)安装到系统范围的位置,这需要sudo!例如,ipython坚持将mandoc安装到/System/Library/Frameworks/Python.framework/Versions/2.7/share/,这违反了权限问题,我所能做的就是使用sudo
  • 对于brew安装的一些 Python 模块,它们被符号链接到/usr/local/lib/python2.7/site-packages/。除了您必须记住将此位置添加到PYTHONPATH之外,一切似乎都很棒。

我想知道任何建议和统一的方法来处理这些质量,或者任何解释来使这些东西变得清晰。

m00*_*000 3

也许是时候考虑使用virtualenv了。Virtualenv 使用您指定的 python 版本创建独立的 python 环境。激活新的虚拟环境后,使用 pip 安装的所有内容都会在该环境下进行。这有助于避免出现您所描述的情况。

例如,使用默认的 python 创建并激活一个新的 python 环境:

# create environment
$ virtualenv --distribute myproject
New python executable in myproject/bin/python
Installing distribute...done.
Installing pip...done.

# activate environment
$ . ./myproject/bin/activate

# check default python
(myproject)$ which python
/Users/me/myproject/bin/python
Run Code Online (Sandbox Code Playgroud)

建议使用--distribute选项来指示在新环境中安装软件包时应使用分发而不是(旧的)setuptools。激活后,您的命令提示符将更改以指示哪个 python 环境处于活动状态。

现在安装一些包。这些文件将进入 myproject 目录:

# install django
(myproject)$ pip install django
...

# search for django dir
(myproject)$ find myproject -iname django
myproject/lib/python2.7/site-packages/django
Run Code Online (Sandbox Code Playgroud)

最后,停用:

# deactivate and check for default python
(myproject)$ deactivate
$ which python
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

要使用非默认版本的 python 创建环境:

$ virtualenv --distribute -p /path/to/custom/python mynewproject
Run Code Online (Sandbox Code Playgroud)

默认情况下,virtualenv 会将用于引导它的 python 版本安装的任何软件包复制到新环境。为了防止这种情况并创建一个空环境,请使用该--no-site-packages选项。这对于创建可以精确复制的环境(例如从开发到生产)特别有用。

更新:从 1.7 版本开始--no-site-packages已成为 virtualenv 的默认行为。

如果您想了解更多详细信息,可以在线找到大量教程和博客文章。例如:

  1. 有关在 Django 中使用 pip 和 virtualenv 的注意事项。(大部分帖子不是 django 特定的)
  2. 使用 virtualenv。

尝试一下,我相信您会坚持下去。

注意:确保您的可执行脚本没有硬编码 python 解释器。即他们的第一行应该是#!/usr/bin/env python而不是类似的东西#!/usr/bin/python