zoukankan      html  css  js  c++  java
  • 进一步了解pip

    在Python中,安装第三方模块,是通过包管理工具pip完成的。

    模块的路径

    当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错。
    默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:

    >>> import sys
    >>> sys.path
    [
        '/home/username/Downloads',
        '/home/username/anaconda3/lib/python38.zip',
        '/home/username/anaconda3/lib/python3.8',
        '/home/username/anaconda3/lib/python3.8/lib-dynload',
        '/home/username/anaconda3/lib/python3.8/site-packages',
    ]
    

    如果我们要添加自己的搜索目录,有两种方法:

    • 直接修改sys.path,添加要搜索的目录:
    >>> import sys
    >>> sys.path.append('/Users/michael/my_py_scripts')
    

    这种方法是在运行时修改,运行结束后失效。

    • 设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。
    echo $PYTHONPATH
    export PYTHONPATH=~/pyutil:"$PYTHONPATH"
    

    注意此方法只在当前命令窗口生效,只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。
    可以将此命令添加到~/.bashrc文件中,这样每次启动终端PYTHONPATH都已经被修改了。

    指定安装目录

    从Python2.6开始支持“用户安装方案”,这意味着所有的Python发行版支持为特定用户设定一个替代的包安装位置。对于不同操作系统的默认用户安装位置可以通过site.USER_BASE变量查看:

    python -m site [--user-base] [--user-site]
    

    如果不加后面的可选参数,将会输出所有sys.path,USER_BASE,USER_SITE变量的值,并显示对应的目录是否存在。
    对Linux系统,默认的用户安装目录在~/.local。当然你也可用通过修改USERPYTHONBASE变量的值来修改用户安装位置。

    export PYTHONUSERBASE=/myappenv
    

    然后在使用pip安装包时加上--user选项,就可以将包安装到自己指定的目录了。

    pip install --user SomePackage
    

    注意这种安装方法遵循如下规则:

    • 如果python路径下已经安装了一些包,而这些包与用户要安装的包相冲突,那么不会为用户安装此包。
    • 如果python路径下已经安装了符合要求的包,pip不再为用户安装此包。

    离线安装

    在无法访问网络的环境下安装包,可以提前将所需的包文件下载好,普通包的下载地址https://pypi.org/
    安装包保存在同一目录下如DIR,然后执行命令:

    pip install --no-index --find-links=DIR PACKAGENAME
    

    解释一下两个选项,--find-links指定一个链接或者路径,解析器会到指定的地方去找安装文件,--no-index让pip忽略package index,只到--find-links指定的链接内去找。

    所以如果你只是因为某个包在使用pip在线安装时下载速度慢,想用下载好的wheel文件离线安装,那你可能需要下面的命令:

    pip install --find-links=DIR PACKAGENAME
    

    这样pip还是会联网查找其他包,尤其是所需的依赖包,就不用自己考虑依赖问题了。

    参考

    安装第三方模块
    User guide of pip
    https://pip.pypa.io/en/stable/reference/pip_install/#install-no-index

  • 相关阅读:
    JDK的几种分析工具
    心理价值
    通过Proxool辅助数据库优化
    人生缄言
    grep 用法
    多服务器快速定位
    RandomAccessFile读取远程系统日志
    20101116 视频处理几个常用指令
    Flickr架构
    JAVA正则表达式语法
  • 原文地址:https://www.cnblogs.com/tofengz/p/13538113.html
Copyright © 2011-2022 走看看