zoukankan      html  css  js  c++  java
  • mac上装有多个python和多个pip,pip到底是指向哪个python?以及如何修改这种行为?

    这个问题从我两年半前学python就困惑着我(至今python水平也没有提高..).

    我的问题是, which python3告诉我, 是/usr/local/bin/python3, which pip3告诉我, 是/usr/local/bin/pip3. 但是当我pip3 show requests时, 啥结果也没有, 虽然我肯定我装了这个包.

    首先需要搞清楚, pip和python之间的关系是什么. 是一个版本的pip对应一个python解释器么? 还是一个pip可以对应多个python? 其实pip是某个python的包. 所以可以说一个python解释器对应一个pip./usr/local/bin/pip3是个symlink, 指向的其实是某个可执行文件. 怎么知道它指向的是哪个可执行文件? 可以用这个python -c "import os; print(os.path.realpath('/usr/local/bin/pip3'))", 其实相当于GNU下的readlink -f, 但mac的readlink不是GNU的, 不支持递归(虽然这个例子里, 不需要递归, mac上直接readlink pip3也行). 总之我得到了

    /usr/local/Cellar/python@3.8/3.8.5/bin/pip3
    

    这下我知道了, usr/local/bin/下的pip3不是我想要的.

    我不想要它, 想把python3.7的pip3替代它.

    我只需要找到python3.7中的pip3的位置即可. python3 -m pip -V 可以做到. 得到了

    /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pip
    

    不过这是个目录. 不是脚本. 那怎么办? 我电脑上还装着anaconda的python, 我把它的pip内容给拷贝了, 改一改第一行shebang中的解释器. 然后放在/usr/local/bin下. 具体内容如下.

    #!/usr/local/bin/python3
    # -*- coding: utf-8 -*-
    import re
    import sys
    
    from pip._internal.cli.main import main
    
    if __name__ == '__main__':
        sys.argv[0] = re.sub(r'(-script.pyw?|.exe)?$', '', sys.argv[0])
        sys.exit(main())
    

    是不是这就完了? 还不行. 需要给它添加可执行权限. 这下执行/usr/local/bin/pip就可以了.

    但是此时执行pip, 还不是/usr/local/bin/pip, 需要重新打开一个session, 那么首先被搜索到的就是它了.

    终于解决了我多年的疑惑, 开心几分钟. 顺便我用类似的想法, 修改了python的指向, 本来它是指向python2.7的, 现在也指向了我想要的python版本.

    注: 我对python了解很浅, 很可能有错误, 希望大家指出, 谢谢.

  • 相关阅读:
    NYOJ 38布线问题
    NYOJ 106背包问题
    基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题
    HDOJ 2546饭卡(01背包问题)
    FBI树-数据结构(二叉树)
    二叉树遍历(flist)(二叉树,已知中序层序,求先序)
    求先序排列(二叉树已知中序和后序,求先序)
    滑雪(dp)
    Python——plot可视化数据,作业8(python programming)
    数据库SQL语言学习----左外连接,右外连接,外连接,自然连接的形象对比
  • 原文地址:https://www.cnblogs.com/Tokubara/p/14115876.html
Copyright © 2011-2022 走看看