当前位置:

首页 > 编程开发 > 如何在Python中使用API?

如何在Python中使用API?

APIAPI:简单来说就是一组协议、一个工具或者一组规则,定义不同应用程序之间的通信方法,把具体实现的过程隐藏起来,只暴露必须调用的部分给开发者使用。上面的定义比较官方,这里简单举个例子来说明一下,比如在现在外面的麦当劳等快餐店都采取手机线上下单,前台拿餐的过程。而在这个过程,作为消费者通常在手机上选好对应的餐品然后点击下单付款,然后等待前台叫号拿餐即可。而这个过程具体怎么实现的我们并不知道,整个过程有对应的app或者小程序通信到厨房数据,然后厨师制作出餐。而这个APP和小程序就充当对应的API功能。举一

本文目录

    如何在Python中使用API?

    API

    API:简单来说就是一组协议、一个工具或者一组规则,定义不同应用程序之间的通信方法,把具体实现的过程隐藏起来,只暴露必须调用的部分给开发者使用。

    上面的定义比较官方,这里简单举个例子来说明一下,比如在现在外面的麦当劳等快餐店都采取手机线上下单,前台拿餐的过程。而在这个过程,作为消费者通常在手机上选好对应的餐品然后点击下单付款,然后等待前台叫号拿餐即可。而这个过程具体怎么实现的我们并不知道,整个过程有对应的app或者小程序通信到厨房数据,然后厨师制作出餐。而这个APP和小程序就充当对应的API功能。

    举一个简单的例子,一个社交平台它每天收到各种语言的评论信息,而作为对应的分析人员面对复杂的语言数据处理,是一个大难题,有人可能说开发一个模型来实现翻译整合功能,这个方法虽然听起来可行但是成本代价高,其次为了解决一个问题,而又去开发一个比较困难的问题。这个与原本的目标偏离越来越远,这个时候就可以借助国内比较成熟的翻译平台API,直接处理现有的数据。这样相对而言成本代价小,更便捷也更能快速实现现有的目标。而API的作用在这里就毋庸置疑了。

    数据接口

    数据接口: 简单来说就是一组封装的数据集口令,就是按照对应的规则发送相应的参数,然后返回对应的相关数据信息。API的调用和数据接口的这两个在日常调用时很类似的,相对而言API的范围更宽广,实现的功能也比较多,而数据接口日常充当的就是一个取数工具比较多。

    就比如说大型电商公司公司一般用统一的SKU来对商品进行管理,而比如这家公司是作为一个品牌商,它会在不同平台上面进行售卖,而在这些平台上面映射的商品标识ID就不同于公司的SKU。因为公司的SKU不仅基于商品而且还考虑各个地方仓库以及产品的各个型号,而这个映射相对而言就比较复杂。
    而在处理不同平台的数据人员一般也不能直接使用公司的数据库来对商品进行分析,因为颗粒度太细,分析起来比较复杂困难,这个时候就可以根据对应功能的要求让开发在现有系统是开发一个单独的数据接口提供相应的公司,避免直接请求数据库过程复杂等相应信息。但数据接口相对实时的数据库存在一定的延迟。

    API的调用和数据接口的调用

    API和数据接口通过前面的举例论述,大致理解起来也比较简单,而具体怎么实现API的调用和数据接口的调用这里简单介绍一下。
    简单来说API的调用和接口的调用都是类似一个HTTP请求,而调用最主要就是根据相应的规则将请求方式、请求头、URL、以及请求体封装好然后发送请求,就可以实现相应的调用。

    但数据接口和API两个的调用相比较而言来,一般数据接口比较简单,很多情况下数据接口是在公司内网数据访问所以请求信息比较简单,而API大多是第三方企业开发对外的服务属于一种商业服务,相对而言为了保证请求的安全,考虑的更为全面,加入了AK、SK、签名、时间戳等信息比较复杂。
    而追本溯源这两个调用都是类似HTTP请求,具体调用大致差不多,主要就是API调用中包含的请求参数的信息更多。而具体怎么实现下面将简单的介绍一下。

    调用的基础-请求方法

    一般而言,常见的HTTP请求调用方式有很多,这方面的资源比较多,可以网上自己查阅,这里就简单说说常见的两种请求方法。

    GET 请求

    GET请求简单来说就是从服务器上获取资源,可以载入到浏览器的缓存中。

    POST 请求

    POST请求一般而言以表单形式向服务器发送请求,请求参数包含在请求体当中可能导致资源的创建和改变。POST请求的信息不能缓存在浏览器中。
    这两个请求方法说起来很简单,但最重要的一点就是了解这两种请求的区别,从而为接口的设计和API的使用更加熟悉。

    GET和POST请求的区别

    1.GET请求请求长度最多1024kb,POST对请求数据没有限制。这一点原因是很多时候GET请求把对应的信息放在URL中,而URL的长度有限,导致GET请求的长度也受到一定的限制。而POST请求相应的参数信息放在请求体body中所以一般不受长度限制。
    2.POST请求比GET更安全一些,因为GET请求中URL包含了相应的信息,页面会被浏览器缓存,其他人可以看到相应的信息。
    3.GET产生一个TCP数据包,POST产生两个TCP数据包。
    GET请求的时候将header、data一起发送出去,然后服务器响应返回200。而POST则是先发送header,等待服务器响应100,然后发送data,最后服务器响应返回200.但在这里注意,POST请求分为两次,但是请求体body是紧随在header之后发送的,所以这之间时间可以微乎不计。
    4.GET请求只支持URL编码,而POST相对而言有多种编码方式。
    5.GET请求参数是通过URL传递的,多个参数以&连接,POST请求放在request body中。
    6.GET请求只支持ASCII字符,而POST没有限制。
    一般而言浏览器输入网址可以直接访问的一般是GET请求。

    Python实现GET请求和POST请求

    上面大篇幅的介绍了一些数据接口、API相关知识以及请求方法,使用起来比较简单,下面可以大致熟悉一下相应的请求方式。一般直接使用Python的request库就可以。

    GET请求
    import request
    # GET请求发送的参数一定要是字典的形式,可以发送多个参数。
    # 发送格式:{'key1':value1', 'key2':'value2', 'key3', 'value3'}
    # 样例不能运行
    url ='http://www.xxxxx.com'
    params = {'user':'lixue','password':111112333}
    requests.get(url,data = parms)
    POST请求

    POST请求一般有三种提交形式:application/x-www-form-urlencoded、multipart/form-data、application/json.
    具体查看是三种的哪一种请求方式:谷歌浏览器检查 → Network →选择加载文件 → Headers → Reuqest Headers → Content-Type
    具体编码方式为下面三种,可以了解具体的请求实现,一般公司内部的数据接口设置了局域网所以有的可以不需要加header。

    POST请求的三种提交形式

    1.最常见的post提交数据以form表单为主:application/x-www-form-urlencoded

    import request
    data={'k1':'v1','k2':'v2'}
    headers= {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
    requests.post(url,headers = headers,data=data)

    2.以json格式提交数据:application/json

    data = {'user':'lixue','password':12233}
    data_json = json.dumps(params)
    requests.post(url,headers = headers,data = data_json)

    3.一般用来传文件(爬虫很少用到):multipart/form-data

    files = {'files':open('c://xxx.txt','rb')}
    requests.post(url = url,headers = headers,files = files)
    一个简单API请求的实例

    通过上面简单的介绍,对于具体请求大致了解,这里搜集了一个简单的API聚合中心,提供了很多挺好用的功能。下面以这个简单API的作一个简单的示范API地址。
    这个小实例采取的是天气API接口获取近15天的天气。在使用这个API之前记得获取相应的apiKey和查看具体的使用文档。这个API网站一般对相应API提供一定的免费次数,可以充当学习使用,而且支持GET和POST请求。刚好可以适合练手。

    GET请求
    params = {
        "apiKey":'换成你的apikey',
        "area":'武汉市',
    }
    url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea'
    response = requests.get(url,params)
    print(response.text)
    POST请求

    这里的POST请求也就是对应上面的最常见的post提交数据以form表单为主:application/x-www-form-urlencoded

    url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea'
    params = {
        "apiKey":'换成你的apikey',
        "area":'武汉市武昌区',
    }
    response = requests.post(url,params)
    print(response.text)

    在调用这种API接口一般都需要进行一个状态码等返回信息测试,检查请求是否正常,可以按照下面的给出参考。

    params = {
        "apiKey":'换成你的apikey,
        "area":'武汉市',
    }
    url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea'
    response = requests.post(url,params)
    print(response.text)
    if response.status_code != 200:
        raise ConnectionError(f'{url} status code is {response.status_code}.')
    response = json.loads(response.content)
    if 'desc' not in response.keys():
        raise ValueError(f'{url} miss key msg.')
    if response['desc'] != '请求成功':
        print(11)
    数据提取

    其实API的调用很简单,但其中最核心的其实是返回信息中数据的抽取,一般而言返回的信息都是json形式,需要从中用字典键值对方式提取数据,下面这块根据请求的数据返回相应的信息并提取出来,获取信息后面将会展示。

    import requestsimport pandas as pd 
    import numpy as npimport jsondef get_url(area):
        url = 'https://api.apishop.net/common/weather/get15DaysWeatherByArea'
        params = {
            "apiKey":'换成你的apikey',
            "area":area,
        }
        response = requests.get(url,params)
        if response.status_code != 200:
            raise ConnectionError(f'{url} status code is {response.status_code}.')
        response = json.loads(response.content)
        if 'desc' not in response.keys():
            raise ValueError(f'{url} miss key msg.')
        if response['desc'] != '请求成功':
            print(11)
        return responsedef  extract_data(web_data):
        data= web_data['result']['dayList']
        weather_data = pd.DataFrame(columns = ['city','daytime','day_weather','day_air_temperature','day_wind_direction','day_wind_power',                                           'night_weather','night_air_temperature','night_wind_direction','night_wind_power'])
        for i in range(len(data)):
            city = data[i]["area"]
            daytime = data[i]["daytime"]
            daytime = daytime[:4]+'-'+daytime[4:6]+'-'+daytime[-2:]
            day_weather = data[i]["day_weather"]
            day_air_temperature = data[i]['day_air_temperature']
            day_wind_direction = data[i]["day_wind_direction"]
            day_wind_power = data[i]['day_wind_power']
            night_weather = data[i]['night_weather']
            night_air_temperature = data[i]["night_air_temperature"]
            night_wind_direction = data[i]['night_wind_direction']
            night_wind_power = data[i]["night_wind_power"]
            c = {"city": city,"daytime": daytime,"day_weather":day_weather,"day_air_temperature":day_air_temperature,
                 "day_wind_direction":day_wind_direction,"day_wind_power":day_wind_power,"night_weather":night_weather,
                 "night_air_temperature":night_air_temperature,"night_wind_direction":night_wind_direction,
                 "night_wind_power":night_wind_power}
            weather_data = weather_data.append(c,ignore_index = True)
        weather_data.to_excel(r"C:\Users\zhangfeng\Desktop\最近十五天天气.xlsx",index = None)
        return weather_dataif __name__ == '__main__':
        print("请输入对应的城市")
        web_data = get_url(input())
        weather_data = extract_data(web_data)

    部分结果如下图:
    如何在Python中使用API?

    数据接口实例

    在日常学习中数据接口的使用可能相对较少,数据接口的应用场景大多数情况下是应用在公司内部调取数据的情况下比较多,所以一般很少见到,这里展示工作中遇到的两个数据接口的使用,由于工作考虑,展示的代码属于样例,并不能调用。可以参考一下调用实现以及规范。

    POST请求调用数据接口
    # 销售状态查询def id_status(id_dir):
        id_data = pd.read_excel(id_dir,sheet_name="Sheet1") 
        id_data.columns = ['shop', 'Campaign Name','Ad Group Name','Item Id']  # 方便后期处理更改列名
        id_data["Item Id"] = id_data["Item Id"].astype(str)
        id_list = list(id_data['Item Id'])
        print(len(id_list))
        id_list = ','.join(id_list)
        if isinstance(id_list, int):
            id_list = str(id_list)
        id1 = id_list.strip().replace(',', ',').replace(' ', '')
        request_url = "http://xxx.com"
        # 通过item_id查询id状态
        params = {
            "item_id":id1,
        }
        data_json = json.dumps(params) # 属于POST第二种请求方式
        response = requests.post(request_url, data = data_json)
        print(response.text)
        if response.status_code != 200:
            raise ConnectionError(f'{request_url} status code is {response.status_code}.')
        response = json.loads(response.content)
        if 'message' not in response.keys():
            raise ValueError(f'{request_url} miss key msg.')
        if response['message'] != 'ok':
            print(11)
        data= response['result']
        ad_data = pd.DataFrame(columns = ['Item Id','saleStatusName'])
        for j in range(len(data)):
            item_id =data[j]["item_id"]
            saleStatusName = data[j]['saleStatusName']
            c = {"Item Id": item_id,
             "saleStatusName": saleStatusName,
             }
            ad_data = ad_data.append(c,ignore_index = True)
        total_data = pd.merge(ad_data,id_data,on ='Item Id', how ='left')
        df_column =  ['shop', 'Campaign Name','Ad Group Name','Item Id','saleStatusName']
        total_data = total_data.reindex(columns=df_column)
        return total_data
    GET请求调用数据接口
    ### 库存数据查询def Smart_investment_treasure(investment_dir):
        product_data = pd.read_excel(investment_dir,sheet_name="product")
        if len(product_data)>0:
            product_data['商品ID']=product_data['商品ID'].astype(str)
            product_list=list(product_data['商品ID'])
            product_id = ','.join(product_list)
        else:
            product_id='没有数据' 
        return product_id    
    def stock_query(investment_dir):
            product_data = pd.read_excel(investment_dir,sheet_name="product")
        if len(product_data)>0:
            product_data['商品ID']=product_data['商品ID'].astype(str)
            product_list=list(product_data['商品ID'])
            product_id = ','.join(product_list)
        else:
            product_id='没有数据' 
        if isinstance(product_id, int):
            product_id = str(id)
        product_id = product_id.strip().replace(',', ',').replace(' ', '')
        request_url = "http://xxx.com"
        # 通过ali_sku查询erpsku
        params = {
            "product_id":product_id,
        }
        
        response = requests.get(request_url, params) #属于GET请求
        if response.status_code != 200:
            raise ConnectionError(f'{request_url} status code is {response.status_code}.')
        response = json.loads(response.content)
        if 'msg' not in response.keys():
            raise ValueError(f'{request_url} miss key msg.')
        if response['msg'] != 'success':
            print(11)
        data= response['data']['data']
        # requestProductId = id.split(',')
        id_state=[]
        overseas_stock=[]
        china_stock=[]
        id_list=[]
        for j in range(len(data)):
            inventory_data= data[j]['list']
            overseas_inventory=0
            ep_sku_list=[]
            sea_test=0
            china_inventory=0
            test="paused"
            id_test=""
            id_test=data[j]['product_id']
            for i in range(len(inventory_data)):
                if inventory_data[i]["simple_code"] in ["FR","DE","PL","CZ","RU"] and inventory_data[i]["erp_sku"] not in ep_sku_list:
                    overseas_inventory+=inventory_data[i]["ipm_sku_stock"]
                    ep_sku_list.append(inventory_data[i]["erp_sku"])
                    sea_test=1
                elif inventory_data[i]["simple_code"] == 'CN':
                    china_inventory+=int(inventory_data[i]["ipm_sku_stock"])
            if overseas_inventory>30:
                test="open"
            elif overseas_inventory==0 and china_inventory>100:
                test="open"
            id_list.append(id_test)
            overseas_stock.append(overseas_inventory)
            china_stock.append(china_inventory)           
            id_state.append(test)
        c={"id":id_list,
           "id_state":id_state,
           "海外仓库存":overseas_stock,
           "国内大仓":china_stock       }
        ad_data=pd.DataFrame(c)
        return ad_data

    几种常见API调用实例

    百度AI相关API

    百度API是市面上面比较成熟的API服务,在大二期间由于需要使用一些文本打标签和图像标注工作了解了百度API,避免了重复造轮子,当时百度API的使用比较复杂,参考文档很多不规范,之前也写过类似的百度API调用极其不稳定,但最近查阅了百度API参考文档,发现目前的调用非常简单。
    通过安装百度开发的API第三方包,直接利用Python调包传参即可使用非常简单。这里展示一个具体使用,相应安装第三方库官方文档查阅。

    '''
    第三方包名称:baidu-aip 
    百度API 
    """ 你的 APPID AK SK """
    APP_ID = '你的 App ID'
    API_KEY = '你的 Api Key'
    SECRET_KEY = '你的 Secret Key'
    参考文档:https://ai.baidu.com/ai-doc/NLP/tk6z52b9z
    '''
    from aip import AipNlp
    APP_ID = 'xxxxxx'
    API_KEY = '换成你的apikey'
    SECRET_KEY = '换成你的SECRET_KEY'
    client = AipNlp(APP_ID, API_KEY, SECRET_KEY)
    text = "我还没饭吃"
    # 调用文本纠错 
    client.ecnet(text)

    如何在Python中使用API?

    百度地图API

    这个API当时为了设计一个推荐体系引入经纬度换算地址,这样为数据计算带来极大的方便,而且对于一般人来说文本地址相比经纬度信息更加直观,然后结合Python一个第三方包实现两个地址之间经纬度计算得出相对的距离。

    # https://lbsyun.baidu.com/
    # 计算校验SN(百度API文档说明需要此步骤)
    import pandas as pd
    import numpy as np
    import warnings
    import requests
    import urllib
    import hashlib
    import json
    from geopy.distance import geodesic
    location = input("输入所在的位置\n")  # "广州市天河区"
    ak = "ak1111" # 参照自己的应用
    sk = "sk111111" # 参照自己的应用
    url = "http://api.map.baidu.com"
    query = "/geocoding/v3/?address={0}&output=json&ak={1}&callback=showLocation".format(location, ak)
    encodedStr = urllib.parse.quote(query, safe="/:=&?#+!$,;'@()*[]")
    sn = hashlib.md5(urllib.parse.quote_plus(encodedStr + sk).encode()).hexdigest()
    # 使用requests获取返回的json
    response = requests.get("{0}{1}&sn={2}".format(url, query, sn))
    data1=response.text.replace("showLocation&&showLocation(","").replace(")","")
    data = json.loads(data1)
    print(data)
    lat = data["result"]["location"]["lat"]
    lon = data["result"]["location"]["lng"]
    print("纬度: ", lat, " 经度: ", lon)
    distance=geodesic((lat,lon), (39.98028,116.30495))
    print("距离{0}这个位置大概{1}".format(location, distance))

    如何在Python中使用API?

    有道API

    在网上查阅了很多API,前面介绍的几种API,他们携带的请求参数信息相对比较简单,调用实现和基础请求没啥区别,这里找了一个相对而言比较多的请求参数的API,相对而言这种API数据付费API,它的安全性以及具体的实现都相对复杂,但是更适合商用。下面可以简单看看。

    import requests
    import time
    import hashlib
    import uuid
    youdao_url = 'https://openapi.youdao.com/api'   # 有道api地址
    translate_text = "how are you!"
    input_text = ""
    # 当文本长度小于等于20时,取文本
    if(len(translate_text) <= 20):
        input_text = translate_text    
    # 当文本长度大于20时,进行特殊处理
    elif(len(translate_text) > 20):
        input_text = translate_text[:10] + str(len(translate_text)) + translate_text[-10:]
    
    uu_id = uuid.uuid1()
    now_time = int(time.time())
    app_id = '1111111'
    app_key = '11111111111'
    sign = hashlib.sha256((app_id + input_text + str(uu_id) + str(now_time) + app_key).encode('utf-8')).hexdigest()   # sign生成
    data = {
        'q':translate_text,   # 翻译文本
        'from':"en",   # 源语言
        'to':"zh-CHS",   # 翻译语言
        'appKey':app_id,   # 应用id
        'salt':uu_id,   # 随机生产的uuid码
        'sign':sign,   # 签名
        'signType':"v3",   # 签名类型,固定值
        'curtime':now_time,   # 秒级时间戳
    }
    r = requests.get(youdao_url, params = data).json()   # 获取返回的json()内容
    print("翻译后的结果:" + r["translation"][0])   # 获取翻译内容

    翻译后的结果:你好!
    这个API调用中引用了几个真正商用中的一些为了安全性等设置的验证信息,比如uuid、sign、timestamp,这几个在API调用中也是老生常谈的几个概念,是比较全面的。下面简单介绍一下。

    uuid

    uuid码:UUID是一个128比特的数值,这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用来识别属性类型,在所有空间和时间上被视为唯一的标识。一般来说,可以保证这个值是真正唯一的任何地方产生的任意一个UUID都不会有相同的值。使用UUID的一个好处是可以为新的服务创建新的标识符。是一种独特的唯一标识符,python 第三方库uuid 提供对应的uuid生成方式,有以下的几种 uuid1(),uuid3(),uuid4(),uuid5()上面采用的是uuid1()生成,还可以使用uuid4()生成。

    sign

    sign:一般为了防止被恶意抓包,通过数字签名等保证API接口的安全性。为了防止发送的信息被串改,发送方通过将一些字段要素按一定的规则排序后,在转化成密钥,通过加密机制发送,当接收方接受到请求后需要验证该信息是否被篡改过,也需要将对应的字段按照同样的规则生成验签sign,然后在于后台接收到的进行比对,可以发现信息是否被串改过。在上面的例子利用hashlib.sha256()来进行随机产生一段密钥,最后使用.hexdigest()返回最终的密钥。
    curtime:引入一个时间戳参数,保证接口仅在一分钟内有效,需要和客户端时间保持一致。避免重复访问。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python API
    相关文章 更多
    python删除一个列表里的重复元素的方法与代码示例
    python删除一个列表里的重复元素的方法与代码示例

    学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

    Python写接口的步骤及完整代码示例
    Python写接口的步骤及完整代码示例

    详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

    codex怎么读取word文档及docx文件操作教程
    codex怎么读取word文档及docx文件操作教程

    介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

    怎么在Python中调用C语言代码提升性能
    怎么在Python中调用C语言代码提升性能

    详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

    Python与C语言的性能差异及底层原理
    Python与C语言的性能差异及底层原理

    深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

    Python和C语言哪个更适合编程入门
    Python和C语言哪个更适合编程入门

    客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    langgraph python guide中文入门教程详解
    langgraph python guide中文入门教程详解

    本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

    Windows 安装 Python:从官方入口到虚拟环境的可复现实践
    Windows 安装 Python:从官方入口到虚拟环境的可复现实践

    面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。