Python的包管理工具pip及打包wheel

包管理工具pip

简介

Pip 是安装python包的工具,提供了安装包,列出已经安装的包,升级包以及卸载包的功能。

Pip 是对easy_install的取代,提供了和easy_install相同的查找包的功能,因此可以使用easy_install安装的包也同样可以使用pip进行安装。

皮皮Blog

安装

python3或者anaconda自带pip

pip版本更新

pip3 install --upgrade pip

[Installation - pip documentation v23.3.dev0]

参数

-i https://pypi.tuna.tsinghua.edu.cn/simple

--user makes pip install packages in your home directory instead, which doesn't require any special privileges.

 --force-reinstall
强制重装当前包,即使已是最新。Reinstall all packages even if they are already up-to-date.

-I, --ignore-installed
Ignore the installed packages (reinstalling instead).

pip install **.whl    //pip通过whl安装

Pip的使用

安装package

$ pip install ***

更改pip源至国内镜像,显著提升下载速度:

pip install *** -i https://pypi.tuna.tsinghua.edu.cn/simple 

清华大学的pip源,官网pypi的镜像,每隔5分钟同步一次。有的网站下载不下来,可以试试:--trusted-host pypi.sr。

豆瓣源:-i https://pypi.douban.com/simple/

重新安装需要更新的依赖:

pip install  --upgrade

确保重新安装所有依赖,而不仅仅是那些需要更新的依赖:

pip install --upgrade --upgrade-strategy eager 

安装出错

出错1:安装时候忽略某个依赖包

如更新tensorflow时报错:ERROR: Cannot uninstall 'wrapt'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

pip install -U --ignore-installed wrapt tensorflow

出错2:找不到要安装的包
pip install evaluate Looking in indexes: http://pypi.cross.pdd.net/simple ERROR: Could not find a version that satisfies the requirement evaluate (from versions: none) ERROR: No matching distribution found for evaluate
原因可能是python版本过低,或者安装在root下。重新下载anaconda可解决。

安装特定版本的package

通过使用==, >=, <=, >, <来指定一个版本号。

$ pip install 'Markdown<2.0'

$ pip install 'Markdown>2.0,<2.0.3'

升级包

升级包到当前最新的版本,可以使用-U 或者 --upgrade

$ pip install --upgrade ***

卸载包

$ pip uninstall Markdown

查询包/查看package详情说明

pip3 show scipy

会展示其依赖和常用的被依赖:

Name: scipy

Version: 1.3.0

Summary: SciPy: Scientific Library for Python

Home-page: https://www.scipy.org

Author: None

Author-email: None

License: BSD

Location: /Users/youzipi/anaconda3/lib/python3.6/site-packages

Requires: numpy

Required-by: seaborn, Keras

简单查看包

python -c "import torch;print(torch.__version__)"

列出安装的packages

方式1:pip list

方式2:pip list --format=freeze

方式3:pip freeze

不过自pip版本19.1后,pip freeze会生成@file:///URL这种形式的环境路径。
限制:pip生成的这种环境路径,仅支持在本地文件系统中使用,不能拷贝给他人使用

Note:包安装后的py文件路径:/usr/local/lib/python2.7/dist-packages

[pip Reference Guide]

代码打包whl

setuptools是python自带的用来构建包的工具,构建出来的wheel(.whl)可供其他人pip install和import。

安装打包所需的库

​​pip install setuptools​​
​​pip install wheel

升级setuptools(如果遇到后面配置时find_packages找不到)

pip install --upgrade setuptools

流程

创建目录结构

helloworld
—__init__.py

—modeldir/
—code1.py
—main.py
setup.py

其中main.py

import torch

from .modeldir.model.model_util import ModelConfig

class Model():

    @classmethod
    def init(cls):
        *** = load_config(model_path_name)
        cls.model = loadTorchModel(model_path_name, ***)

    @classmethod
    def infer(cls, text):
        return infer(text, ***)


def warm_up():
    Model.init() # load模型及配置
    Model.infer("这是一个测试") # 可以选择测试一条数据


def infer_forward(text, **kwargs):
    return Model.infer(text) # 模型推理


if __name__ == '__main__': # 仅本地运行时有效。作为包import时无效。
    warm_up()
    print(infer_forward("这是一个测试"))

Note:

1 import同级目录时,需要from .进行相对引入。否则后面测试包时找不到modeldir。

2 读取同目录下文件时,要使用绝对路径,否则可能找不到。

real_dir = os.path.split(os.path.realpath(__file__))[0]
model_path_name = os.path.join(real_dir, model_path_name)

编辑__init__.py

这里是之后用这个包时候,from helloworld import *时,能import什么东西出来
可以是from helloworld import main
或者是from .main import *
__all__ = ['warm_up', 'infer_forward'] # 都是main.py中的函数

编辑setup.py

from setuptools import setup, find_packages

setup(name='helloworld',
      version='0.0.1',
      # description='helloworld!',
      author='isme',
      # author_email='helloworld@outlook.com',
      # requires=['flask'],  # 定义依赖哪些模块
      packages=find_packages(),  # 系统自动从当前目录开始找包
      include_package_data=True,
      # 如果有的包不用打包,则只能指定需要打包的文件
      # packages=['main','modeldir','__init__']  #指定目录中需要打包的py文件,注意不要.py后缀。modeldir这种目录没测试过,应该也可以?
      # license='apache 3.0'
      )

Note:

name : 打包后包的文件名
version : 版本号
author : 作者
author_email : 作者的邮箱
py_modules : 要打包的.py文件
packages: 打包的python文件夹
include_package_data : 项目里会有一些非py文件,比如html和js等,这时候就要靠include_package_data 和 package_data 来指定了。package_data:一般写成{‘your_package_name’: [“files”]}, include_package_data还没完,还需要修改MANIFEST.in文件.MANIFEST.in文件的语法为: include xxx/xxx/xxx/.ini/(所有以.ini结尾的文件,也可以直接指定文件名)
license : 支持的开源协议
description : 对项目简短的一个形容
ext_modules : 是一个包含Extension实例的列表,Extension的定义也有一些参数。
ext_package : 定义extension的相对路径
requires : 定义依赖哪些模块
provides : 定义可以为哪些模块提供依赖
data_files :指定其他的一些文件(如配置文件),规定了哪些文件被安装到哪些目录中。如果目录名是相对路径,则是相对于sys.prefix或sys.exec_prefix的路径。如果没有提供模板,会被添加到MANIFEST文件中。

编辑MANIFEST.in文件

一般不需要也可以打包整个模型吧。

如果你需要将数据或者模型也打包,需要编辑MANIFEST.in文件(setup.py同级)
recursive-include helloword *

打包成whl文件

在程序根目录运行

rm -rf build dist *.egg-info #可以不用,会覆盖
python setup.py bdist_wheel

在dist目录下生成了打包文件:helloworld-0.0.1-py3-none-any.whl

测试包

pip安装whl文件

进入存放whl目录运行

pip install helloworld-0.0.1-py3-none-any.whl --force-reinstall

验证是否安装成功

python -c "import helloworld"

成功引入无报错即成功安装。

python -c "from helloworld import *; warm_up(); print(infer_forward('测试一个'))"

运行测试下结果,看下代码有没有错误。

其它(可不管)

pip打包成压缩文件
python setup.py sdist
安装压缩文件
解压压缩的文件进入setup.py所在目录,运行
python setup.py install

[https://www.cnblogs.com/DarkRoger/p/16602129.html]

from:Python的包管理

ref:

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值