• 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了解很浅, 很可能有错误, 希望大家指出, 谢谢.

  • 相关阅读:
    Chrome自带恐龙小游戏的源码研究(四)
    Chrome自带恐龙小游戏的源码研究(三)
    Chrome自带恐龙小游戏的源码研究(二)
    Chrome自带恐龙小游戏的源码研究(一)
    使用HTML5制作简单的RPG游戏
    EventListener中的handleEvent
    canvas drawImage方法不显示图片的解决方案
    canvas转盘抽奖的实现(二)
    股市高手的领悟
    《最伟大的投资习惯》读书笔记
  • 原文地址:https://www.cnblogs.com/Tokubara/p/14115876.html
Copyright © 2020-2023  润新知