我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用Helm部署微服务应用PiggyMetrics

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用Helm部署微服务应用PiggyMetrics

本文介绍如何将一个较复杂的应用部署到Kubernetes容器服务上,下面将从基础设施和应用部署的不同组合方式,来部署一个复杂的SpringCloud应用。

PiggyMetrics

PiggyMetrics是github上的一个SpringCloud应用项目,Star数目3400多。这个项目主体采用Docker Compose部署,包含了完整的源代码以及构建好的容器镜像,是非常不错的SpringCloud容器化示例。

1.png

 

 

 

这个项目包含了3个业务微服务,分别是统计服务(Statistics Service)、账户服务(Account Service)和通知服务(Notification Service)。每个服务分别对应一个独立的MongoDB。微服务架构图示(采用作者原图)如下:

1.png

 

 

 

 

SpringCloud基础组件负责服务注册和registry服务(Eureka服务注册),config服务(配置管理),gateway(API网关,同时也是JavaScript Web界面),monitor服务(Hystrix Dashboard/Turbine)等。

 

修改docker-compose

1. 修改PiggyMetrics应用程序的Docker编写文件
切换配置文件版本。
PiggyMetrics的部署采用docker-compose YAML部署到单机,如果要部署到Kubernetes环境中 ,需要转换成为Kubernetes deployment YAML。

说明 PiggyMetrics中的docker compose模版为2.1,kompose不支持该版本,所以需要把compose文件改为版本2。

2. 在docker-compose.yml文件中。

去除kompose不支持的语法。

depends_on:
      config:
        condition: service_healthy  # 不支持 condition

增加Kubernetes server type annotation。

depends_on:
  - config
labels:
  kompose.service.type: loadbalancer

在docker-compose.dev.yml文件中,将PiggyMetrics应用程序使用的四个MongoDB数据库的外部端口更改为27017。

说明 PiggyMetrics应用包含四个MongoDB数据库,分别由 auth-mongodb, 、account-mongodb、statistics-mongodb和 notification-mongodb这四个字段定义。

完整的YAML文件示例如下:

version: '2'
services:
  rabbitmq:
    image: rabbitmq:3-management
    restart: always
    labels:
      kompose.service.type: nodeport
    ports:
      - 5672
      - 15672:15672
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  config:
    environment:
      CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
    image: sqshq/piggymetrics-config
    restart: always
    ports:
      - 8888
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  registry:
    environment:
      CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
    image: sqshq/piggymetrics-registry
    restart: always
    depends_on:
      - config
    labels:
      kompose.service.type: loadbalancer
    ports:
      - 8761:8761
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  gateway:
    environment:
      CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
    image: sqshq/piggymetrics-gateway
    restart: always
    depends_on:
      - config
    labels:
      kompose.service.type: loadbalancer
    ports:
      - 4000:4000
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  auth-service:
    environment:
      CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
      NOTIFICATION_SERVICE_PASSWORD: $NOTIFICATION_SERVICE_PASSWORD
      STATISTICS_SERVICE_PASSWORD: $STATISTICS_SERVICE_PASSWORD
      ACCOUNT_SERVICE_PASSWORD: $ACCOUNT_SERVICE_PASSWORD
      MONGODB_PASSWORD: $MONGODB_PASSWORD
    image: sqshq/piggymetrics-auth-service
    restart: always
    ports:
      - 5000
    depends_on:
      - config
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  auth-mongodb:
    environment:
      MONGODB_PASSWORD: $MONGODB_PASSWORD
    image: sqshq/piggymetrics-mongodb
    restart: always
    ports:
      - 27017
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  account-service:
    environment:
      CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
      ACCOUNT_SERVICE_PASSWORD: $ACCOUNT_SERVICE_PASSWORD
      MONGODB_PASSWORD: $MONGODB_PASSWORD
    image: sqshq/piggymetrics-account-service
    restart: always
    ports:
      - 6000
    depends_on:
      - config
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  account-mongodb:
    environment:
      INIT_DUMP: account-service-dump.js
      MONGODB_PASSWORD: $MONGODB_PASSWORD
    image: sqshq/piggymetrics-mongodb
    restart: always
    ports:
      - 27017
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  statistics-service:
    environment:
      CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
      MONGODB_PASSWORD: $MONGODB_PASSWORD
      STATISTICS_SERVICE_PASSWORD: $STATISTICS_SERVICE_PASSWORD
    image: sqshq/piggymetrics-statistics-service
    restart: always
    ports:
      - 8888
    depends_on:
      - config
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  statistics-mongodb:
    environment:
      MONGODB_PASSWORD: $MONGODB_PASSWORD
    image: sqshq/piggymetrics-mongodb
    restart: always
    ports:
      - 27017
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  notification-service:
    environment:
      CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
      MONGODB_PASSWORD: $MONGODB_PASSWORD
      NOTIFICATION_SERVICE_PASSWORD: $NOTIFICATION_SERVICE_PASSWORD
    image: sqshq/piggymetrics-notification-service
    restart: always
    ports:
      - 8000
    depends_on:
      - config
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  notification-mongodb:
    image: sqshq/piggymetrics-mongodb
    restart: always
    environment:
      MONGODB_PASSWORD: $MONGODB_PASSWORD
    ports:
      - 27017
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  monitoring:
    environment:
      CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
    image: sqshq/piggymetrics-monitoring
    restart: always
    depends_on:
      - config
    labels:
      kompose.service.type: loadbalancer
    ports:
      - 9000:8080
      - 8989:8989
    logging:
      options:
        max-size: "10m"
        max-file: "10"
---

使用Kompose生成Kubernetes配置文件

2. 使用Kompose生成Kubernetes配置文件来部署PiggyMetrics应用。

设定PiggyMetrics部署所需的环境变量。

export NOTIFICATION_SERVICE_PASSWORD=passw0rd
export CONFIG_SERVICE_PASSWORD=passw0rd
export STATISTICS_SERVICE_PASSWORD=passw0rd
export ACCOUNT_SERVICE_PASSWORD=passw0rd
export MONGODB_PASSWORD=passw0rd

运行以下命令将compose文件转换为Kubernetes配置文件。

kompose工具可以一键将compose文件转换为Kubernetes配置文件。

安装kompose

curl -L https://github.com/kubernetes/kompose/releases/download/v1.21.0/kompose-linux-amd64 -o kompose
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

转换配置文件

kompose convert -f docker-compose.yml -o piggymetrics -c

注意:原文给的还指定了docker-compose.dev.yml,执行会报错。提示docker-compose版本号不一致。

FATA All Docker Compose files must be of the same version

 

即使将2个yaml文件版本号改为一致,在后面执行helm install 命令时,会报错:

Error: release piggy failed: Service "config" is invalid: spec.ports[1]: Duplicate value: core.ServicePort{Name:"", Protocol:"TCP", AppProtocol:(*string)(nil), Port:8888, TargetPort:intstr.IntOrString{Type:0, IntVal:0, StrVal:""}, NodePort:0}

执行成功后,会生成文件夹piggymetrics,目录结构如下:

./
├── Chart.yaml
├── README.md
└── templates
    ├── account-mongodb-deployment.yaml
    ├── account-mongodb-service.yaml
    ├── account-service-deployment.yaml
    ├── account-service-service.yaml
    ├── auth-mongodb-deployment.yaml
    ├── auth-mongodb-service.yaml
    ├── auth-service-deployment.yaml
    ├── auth-service-service.yaml
    ├── config-deployment.yaml
    ├── config-service.yaml
    ├── gateway-deployment.yaml
    ├── gateway-service.yaml
    ├── monitoring-deployment.yaml
    ├── monitoring-service.yaml
    ├── notification-mongodb-deployment.yaml
    ├── notification-mongodb-service.yaml
    ├── notification-service-deployment.yaml
    ├── notification-service-service.yaml
    ├── rabbitmq-deployment.yaml
    ├── rabbitmq-service.yaml
    ├── registry-deployment.yaml
    ├── registry-service.yaml
    ├── statistics-mongodb-deployment.yaml
    ├── statistics-mongodb-service.yaml
    ├── statistics-service-deployment.yaml
    └── statistics-service-service.yaml

 

运行helm install命令

运行helm install命令,在Kubernetes集群中部署PiggyMetrics应用。

例如,您可以运行以下命令,在命名空间pm中部署名为piggy的应用。

helm install --namespace pm --name piggy piggymetrics/

输出如下:

NAME:   piggy
LAST DEPLOYED: Sun Apr 26 13:30:46 2020
NAMESPACE: pm
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME                  READY  UP-TO-DATE  AVAILABLE  AGE
account-mongodb       0/1    0           0          0s
account-service       0/1    0           0          0s
auth-mongodb          0/1    0           0          0s
auth-service          0/1    0           0          0s
config                0/1    0           0          0s
gateway               0/1    0           0          0s
monitoring            0/1    0           0          0s
notification-mongodb  0/1    0           0          0s
notification-service  0/1    0           0          0s
rabbitmq              0/1    0           0          0s
registry              0/1    0           0          0s
statistics-mongodb    0/1    0           0          0s
statistics-service    0/1    0           0          0s

==> v1/Pod(related)
NAME                                 READY  STATUS             RESTARTS  AGE
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s
statistics-mongodb-655997cb95-jlfrf  0/1    ContainerCreating  0         1s

==> v1/Service
NAME                  TYPE          CLUSTER-IP    EXTERNAL-IP  PORT(S)                         AGE
account-mongodb       ClusterIP     10.1.186.96   <none>       27017/TCP                       0s
account-service       ClusterIP     10.1.79.137   <none>       6000/TCP                        0s
auth-mongodb          ClusterIP     10.1.37.220   <none>       27017/TCP                       0s
auth-service          ClusterIP     10.1.241.143  <none>       5000/TCP                        0s
config                ClusterIP     10.1.104.247  <none>       8888/TCP                        0s
gateway               LoadBalancer  10.1.186.147  <pending>    4000:30023/TCP                  0s
monitoring            LoadBalancer  10.1.180.30   <pending>    9000:32101/TCP,8989:30052/TCP   0s
notification-mongodb  ClusterIP     10.1.7.3      <none>       27017/TCP                       0s
notification-service  ClusterIP     10.1.109.117  <none>       8000/TCP                        0s
rabbitmq              NodePort      10.1.245.70   <none>       5672:31239/TCP,15672:31437/TCP  0s
registry              LoadBalancer  10.1.250.187  <pending>    8761:31604/TCP                  0s
statistics-mongodb    ClusterIP     10.1.81.216   <none>       27017/TCP                       0s
statistics-service    ClusterIP     10.1.133.191  <none>       8888/TCP                        0s

 

查看pod

# kubectl get pods -n pm
NAME                                    READY   STATUS    RESTARTS   AGE
account-mongodb-7bc77558fb-s8bvk        1/1     Running   0          6m
account-service-85c54b8b7d-cf6mt        1/1     Running   1          6m
auth-mongodb-5655cdc9b5-n5k8l           1/1     Running   0          6m
auth-service-7957d49b5d-vrsxc           1/1     Running   1          6m
config-5ffdb754c6-lxmxs                 1/1     Running   0          6m
gateway-6dff676c4c-cvstn                1/1     Running   2          6m
monitoring-857c68fc4f-brc7n             1/1     Running   1          6m
notification-mongodb-74fb57b5b7-298sd   1/1     Running   0          5m59s
notification-service-dffc5c5db-rn2pm    1/1     Running   1          5m59s
rabbitmq-dbff5d4f7-2w2zk                1/1     Running   0          6m
registry-695b4f945b-2kr7k               1/1     Running   1          5m59s
statistics-mongodb-655997cb95-jlfrf     1/1     Running   0          6m
statistics-service-c9b9d5df4-cnz29      1/1     Running   1          6m

注意:PiggyMetrics的所有pod都运行在pm这个命名空间下。

 

查看svc

# kubectl get svc -n pm
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                          AGE
account-mongodb        ClusterIP      10.1.186.96    <none>        27017/TCP                        6m45s
account-service        ClusterIP      10.1.79.137    <none>        6000/TCP                         6m45s
auth-mongodb           ClusterIP      10.1.37.220    <none>        27017/TCP                        6m45s
auth-service           ClusterIP      10.1.241.143   <none>        5000/TCP                         6m45s
config                 ClusterIP      10.1.104.247   <none>        8888/TCP                         6m45s
gateway                LoadBalancer   10.1.186.147   <pending>     4000:30023/TCP                   6m45s
monitoring             LoadBalancer   10.1.180.30    <pending>     9000:32101/TCP,8989:30052/TCP    6m45s
notification-mongodb   ClusterIP      10.1.7.3       <none>        27017/TCP                        6m45s
notification-service   ClusterIP      10.1.109.117   <none>        8000/TCP                         6m45s
rabbitmq               NodePort       10.1.245.70    <none>        5672:31239/TCP,15672:31437/TCP   6m45s
registry               LoadBalancer   10.1.250.187   <pending>     8761:31604/TCP                   6m45s
statistics-mongodb     ClusterIP      10.1.81.216    <none>        27017/TCP                        6m45s
statistics-service     ClusterIP      10.1.133.191   <none>        8888/TCP                         6m45s

这里面展示的NAME名称,就是SpringCloud各个组件的通讯地址。解析出的地址,就是cluster ip。

 

查看eureka

http://192.168.128.130:2173/

注意:将上面的ip改为master或者node节点ip

 

效果如下:

1.png

 

 

 

访问后台页面

http://192.168.128.130:30023/

 

效果如下:

 1.png

 

 

 由于默认的用户名和密码不知道,这里可以创建一个。注意:密码必须8位以上,符合密码复杂性要求!

1.png

 

 

 

出现一段提示,英文翻译如下:

我们建议您输入一个电子邮件地址,以便我们偶尔提醒您有关服务的信息。持续跟踪你的预算统计数据可能特别有效。

这里我选择不输入邮箱,点击跳过

1.png

 

 

 

 

 

 

 

 最后就进入首页了

1.png

 

 

 

 

本文参考链接:

https://www.alibabacloud.com/help/zh/doc-detail/85935.htm


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用Helm部署微服务应用PiggyMetrics

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Helm部署微服务应用PiggyMetrics

本文介绍如何将一个较复杂的应用部署到Kubernetes容器服务上,下面将从基础设施和应用部署的不同组合方式,来部署一个复杂的SpringCloud应用。PiggyMetricsPiggyMetrics是github上的一个SpringCl
2023-01-31

helm的部署和简单使用

本篇内容主要讲解“helm的部署和简单使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“helm的部署和简单使用”吧!Helm通过软件打包的形式,支持发布的版本管理和控制,很大程度上简化了Kub
2023-06-19

helmfile声明式部署Helm Chart使用详解

这篇文章主要为大家介绍了helmfile声明式部署Helm Chart使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-08

Helm如何解决Kubernetes中部署应用的问题

这篇文章将为大家详细讲解有关Helm如何解决Kubernetes中部署应用的问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、背景Kubernetes(k8s)是一个基于容器技术的分布式
2023-06-04

使用docker、docker-compose部署微服务

使用docker、docker-compose部署微服务 一、使用docker部署1、准备2、上传jar包3、编写dockerfile文件3、构建镜像和容器 二、使用docker-compose部署1、准备服务的jar包和doc
2023-08-30

如何使用 FaaS 服务部署 PHP 应用?

使用 faas 服务部署 php 应用程序的步骤如下:创建 faas 函数(使用 aws lambda 或其他服务)。编写 php 代码(确保以 handler 函数为入口点)。保存并部署函数。如何使用 FaaS 服务部署 PHP 应用F
如何使用 FaaS 服务部署 PHP 应用?
2024-05-06

怎么使用Spring Boot+gRPC构建微服务并部署

这篇文章主要介绍“怎么使用Spring Boot+gRPC构建微服务并部署”,在日常操作中,相信很多人在怎么使用Spring Boot+gRPC构建微服务并部署问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎
2023-07-02

使用Node.js在阿里云服务器上部署应用

Node.js是一种基于ChromeV8JavaScript引擎的运行时环境,它可以让你使用JavaScript语言来开发高性能、异步的网络应用程序。在阿里云服务器上部署Node.js应用,不仅可以实现高性能的应用开发,还可以节省开发和运维的成本。一、准备工作在阿里云服务器上部署Node.js应用,需要以下准备工
使用Node.js在阿里云服务器上部署应用
2023-12-17

云服务器怎么部署应用

云服务器可以部署应用,具体的方法可以参考以下步骤:购买云服务器:按照云服务器提供商的说明或者购买页面中的说明来确定购买云服务器。可以查看云服务器提供商提供的服务条款,或者联系云服务器提供商的客户服务人员了解详情。安装云服务器软件:将购买的云服务器软件安装到服务器上。有些云服务器软件提供商提供了集成安装服务,可以在购买之后进行安装。配置云服务器网络:在购买云服务器之后,可以开始配置云服务器
2023-10-26

怎么使用ThinkPHP部署FTP服务

这篇文章主要介绍“怎么使用ThinkPHP部署FTP服务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用ThinkPHP部署FTP服务”文章能帮助大家解决问题。第一步:安装 FTP 服务在部署
2023-07-06

sap应用怎么部署在云服务器

云端部署SAP应用指南本指南涵盖了在AWS、Azure和GCP等云服务器上部署SAP应用程序的步骤,包括系统准备、数据库和应用服务器部署、系统配置以及生产环境部署。还讨论了云部署的优势和需要注意的事项,例如网络连接、安全、成本优化、合规性和供应商锁定。
sap应用怎么部署在云服务器
2024-04-13

在DigitalOcean的服务器上部署flaskblog应用

在DigitalOcean上部署了flaskblog,项目虽小,部署中也学到了很多东西。 操作系统选择的是Ubuntu14.04,原因就是平时自己主要使用这个版本,顺手而已,所以你自己可以根据需要选择合适的linux版本。 部署方案:Vi
2022-06-04

美国服务器能部署什么应用

美国服务器可以部署各种类型的应用程序,包括但不限于:网站和博客:可以使用美国服务器来托管静态网站、动态网站、博客等。应用程序:可以部署各种类型的应用程序,包括社交媒体应用、电子商务平台、在线游戏等。数据库:可以使用美国服务器来托管各种类
美国服务器能部署什么应用
2024-04-09

sap应用怎么部署在云服务器

要将SAP应用部署到云服务器,您可以按照以下步骤进行操作:1. 选择云服务提供商:首先,您需要选择一个云服务提供商,这些提供商都提供了云服务器的租赁服务。2. 选择适合的云服务器:根据您的需求和预算,选择合适的云服务器。这些服务器通常按照处
2023-09-27

应用怎么部署到云服务器上

将应用部署到云服务器上,一般可以按照以下步骤进行:1. 选择云服务提供商:选择一个适合你应用需求的云服务提供商。2. 创建云服务器实例:在云服务提供商的控制台上创建一个新的云服务器实例。在创建实例时需要选择操作系统、实例类型、存储容量以及网
2023-09-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录