【问题标题】:How do I set the installation directory for pip?如何设置 pip 的安装目录?
【发布时间】:2015-12-10 19:24:18
【问题描述】:

如何使用get-pip.py 设置pip 的安装路径为/usr/local/bin/?我在setup guide 或命令行选项中找不到任何提及。

为了澄清,我不是指安装 pip 包的路径,而是安装 pip 本身的路径(它应该在/usr/local/bin/pip)。

编辑

我确实同意许多 cmets/answers,即 virtualenv 通常会是一个更好的主意。然而,这对我来说并不是最好的,因为它太具有破坏性了;我们用户的许多脚本都依赖于神奇可用的 python2.7;这也不方便,应该改变,但在 virtualenv 出现之前我们就一直在使用 python。

【问题讨论】:

  • 为什么要这样做?让你 pip 和你的包在本地 virtualenv 中是一个更好的主意
  • @frlan 同意,但我认为 atm 对我来说升级比教 16+ 用户如何使用 virtualenv 更容易;我无法进行发行版升级,也无法升级系统默认值,因为它被yum使用
  • $ virtualenv 。其次是 bin/python 对你来说太多了?使用 pip 全局安装软件包并不是一个好主意

标签: python python-2.7 pip


【解决方案1】:

Pip 本身是一个 Python 包,实际的 pip 命令只是运行一个小的 Python 脚本,然后导入并运行 pip 包。

您可以编辑 locations.py 以更改安装目录,但是,如上所述,我强烈建议您不要这样做。

Pip 命令

Pip 接受一个标志,'--install-option="--install-scripts"',可用于更改安装目录:

pip install somepackage --install-option="--install-scripts=/usr/local/bin"

来源方法

在 pip/locations.py 的第 124 行,我们看到以下内容:

site_packages = sysconfig.get_python_lib()
user_site = site.USER_SITE

您可以在技术上编辑这些以更改默认安装路径,但是,最好使用虚拟环境。然后用它来查找 egglink 路径,然后查找 dist 路径(代码附加在下面,来自pip/__init__.py)。

def egg_link_path(dist):
    """
    Return the path for the .egg-link file if it exists, otherwise, None.

    There's 3 scenarios:
    1) not in a virtualenv
       try to find in site.USER_SITE, then site_packages
    2) in a no-global virtualenv
       try to find in site_packages
    3) in a yes-global virtualenv
       try to find in site_packages, then site.USER_SITE
       (don't look in global location)

    For #1 and #3, there could be odd cases, where there's an egg-link in 2
    locations.

    This method will just return the first one found.
    """
    sites = []
    if running_under_virtualenv():
        if virtualenv_no_global():
            sites.append(site_packages)
        else:
            sites.append(site_packages)
            if user_site:
                sites.append(user_site)
    else:
        if user_site:
            sites.append(user_site)
        sites.append(site_packages)

    for site in sites:
        egglink = os.path.join(site, dist.project_name) + '.egg-link'
        if os.path.isfile(egglink):
            return egglink


def dist_location(dist):
    """
    Get the site-packages location of this distribution. Generally
    this is dist.location, except in the case of develop-installed
    packages, where dist.location is the source code location, and we
    want to know where the egg-link file is.

    """
    egg_link = egg_link_path(dist)
    if egg_link:
        return egg_link
    return dist.location

然而,再一次,使用 virtualenv 更容易追踪,任何 Pip 更新都将覆盖这些更改,这与您自己的 virtualenv 不同。

【讨论】:

  • 感谢您的详细回答,我确实同意 virtualenv 通常是一个更好的选择,但它目前对我来说并不是最好的,因为它太具有破坏性;我们的许多用户脚本都依赖于一个神奇的 python2.7,这也很不方便,但是在 virtualenv 出现之前我们就一直在使用 python
  • 我又添加了一个选项,实际上是通过pip install --help 找到的。
  • 等等,这是pip本身的安装路径吗?
  • 是的,我的错,措辞不好。添加了说明。
  • 最简单的解决方案是更改小加载脚本或更改路径。如果您使用的是类 Unix 系统,只需移动它即可。
【解决方案2】:

我发现的最简单的解决方法似乎是:

  1. 安装easy_install;这将按预期进入/usr/local/bin/;执行此操作的步骤已列出here;我个人最终跑了wget https://bootstrap.pypa.io/ez_setup.py -O - | python
  2. /usr/local/bin/easy_install pip安装pip;这将使pip 进入/usr/local/bin

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2022-01-23
    • 1970-01-01
    • 2023-01-25
    相关资源
    最近更新 更多