2015-12-10 191 views
2

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

澄清我不是指安装pip软件包的路径,而是安装pip本身的路径(它保存在/usr/local/bin/pip中)。

编辑

我有很多的意见/回答是的virtualenv是一般一个更好的主意同意。然而,它现在对我来说不是最好的,因为它太破坏了;我们的许多用户脚本依赖python2.7神奇地可用;这也不方便,应该改变,但我们一直在使用python,因为在virtualenv之前。

+2

你为什么要这么做?把你的软件包和你的软件包放在@frlan的本地virtualenv – frlan

+0

表示同意,这是一个更好的主意,但我认为atm对我来说更容易做升级,而不是教16个用户如何使用virtualenv;我无法进行分发升级,因为'yum' –

+1

$ virtualenv使用了系统默认值,所以我无法升级。其次是bin/python对你来说是多么的类?使用pip全局安装软件包并不是一个好主意 – frlan

回答

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进去/usr/local/bin
1

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

您可以编辑locations.py来更改安装目录,但是,如上所述,我建议您不要这样做,我建议您使用高度

皮普命令

皮普接受一个标志, '--install选项= “ - 安装脚本”,',它可以用来更改安装目录:

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更加溯源,任何皮普更新将覆盖这些变化,不像自己的virtualenv。

+0

感谢您的详细解答,我确实同意virtualenv是一个更好的选择,但它现在对我来说不是最好的选择,因为它太破坏了;我们很多用户的脚本都依赖于python2.7的神奇功能,但这也不方便,但是我们一直在使用python,因为在virtualenv之前是一件事 –

+0

我添加了一个选项,我实际上通过'pip install --help'。 –

+0

等一下,这是否为pip本身的安装路径? –