
# 通过编译构建任务发布/获取PyPI私有组件
在软件开发过程中，开发团队经常需要使用私有组件来构建和部署应用程序。然而，当团队尝试从PyPI私有依赖库获取依赖包时，可能会遇到权限或网络问题，导致编译构建任务失败。如何解决这些问题，确保私有组件能够顺利发布和获取？本文档将介绍如何通过编译构建任务发布私有组件到PyPI私有依赖库，以及如何从PyPI私有依赖库获取依赖包完成编译构建任务，确保开发流程的顺畅。
#### 费用说明
该功能需要使用代码托管（CodeArts Repo）服务与编译构建（CodeArts Build）服务，需要[开通/购买华为云码道服务组合套餐](https://support.huaweicloud.com/usermanual-devcloud/devcloud_01_0002.html)。
#### 前提条件
- 已有可用项目。如果没有项目，请先[新建CodeArts项目](https://support.huaweicloud.com/usermanual-devcloud/codearts_01_0027.html)，例如项目名称为project_PyPI。

- 已[创建PyPI格式私有依赖库](https://support.huaweicloud.com/usermanual-cloudartifact/cloudartifact_01_0008.html)。
- 已添加当前账号对当前私有库的"上传"、"下载/查看"私有库组件权限，具体操作请参考[配置私有依赖库权限](https://support.huaweicloud.com/usermanual-cloudartifact/cloudartifact_01_0047.html)。
 
#### 发布私有组件到PyPI私有依赖库
1. 下载私有依赖库配置文件。 
   1. 使用华为云账号[访问CodeArts Artifact的私有依赖库](https://support.huaweicloud.com/usermanual-cloudartifact/cloudartifact_01_0007.html#section0)。
   
   2. 选择PyPI私有依赖库。单击页面右侧"操作指导"。
   
   3. 在弹框中，"选择用途"选择"发布"，再选择"下载配置文件替换"，单击"下载配置文件"。 ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002546202889.png "点击放大")
      
      
   
   4. 在本地将下载的"pypirc"文件另存为".pypirc"文件。
   
   
   
   
2. 配置代码仓库。 
   1. 进入代码托管服务，创建Python代码仓库（操作步骤请参考[新建仓库](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0013.html)）。本文使用模板"Python3 Demo"创建代码仓库。
   
   2. 进入代码仓库，将".pypirc"文件[上传至代码仓库](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0064.html)的根目录中。
   
   3. 新建文件requirements.txt，内容更改为demo ==1.0，将"requirements.txt"文件[上传至代码仓库](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0064.html)的根目录中。
      ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002480397132.png "点击放大")
      
   
   
   
   
3. 配置并执行编译构建任务。 
   1. 在代码仓库中，单击页面右上角"设置构建"，页面跳转至"新建编译构建任务"页面。 在页面中选择"Setuptools模板"，单击"下一步"。
      
   
   2. 编辑步骤"SetupTool构建"。
      1. 工具版本按照实际选择，本文中选择"python3.6"。
      
      2. 删除已有命令行，输入以下命令：
         ```
         # 请保证代码根目录下有setup.py文件,下面命令将把工程打为whl包
         python setup.py bdist_wheel
         # 设置当前项目根目录下的.pypirc文件为配置文件
         cp -rf .pypirc ~/
         # 上传组件至pypi私有库
         twine upload -r pypi dist/*
         ```
         ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002542274693.png "点击放大")
         - 如果上传时提示证书问题，请在上述[3.b]的命令首行添加以下命令，设置环境变量跳过证书校验（twine低于或等于3.8.0版本，request低于或等于2.27版本时可忽略）：
           ```
           export CURL_CA_BUNDLE=""
           ```
           
         
         - 如果上传时提示编码错误，请在上述[3.b]的命令首行添加以下命令，设置Python编码为utf-8：
           ```
           export PYTHONIOENCODING=utf-8
           ```
           
          
       
   
   3. 单击"新建并执行"，启动构建任务执行。 待任务执行成功时，进入私有依赖库，可找到通过构建任务上传的PyPI私有组件。
      ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002542341289.png "点击放大")
      
   
   
   
   
 
#### 从PyPI私有依赖库获取依赖包
1. 下载私有依赖库配置文件。 
   1. 使用华为云账号[访问CodeArts Artifact的私有依赖库](https://support.huaweicloud.com/usermanual-cloudartifact/cloudartifact_01_0007.html#section0)。
   
   2. 选择PyPI私有依赖库，单击页面右侧"操作指导"。
   
   3. 在弹框中，"选择用途"选择"下载"，再选择"下载配置文件替换"，单击"下载配置文件"。 ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002514483364.png "点击放大")
      
      
   
   4. 在本地将下载的"pip.ini"文件另存为"pip.conf"文件。
   
   
   
   
2. 配置代码仓库。 
   1. 进入代码托管服务，创建Python代码仓库（操作步骤请参考[新建代码仓库](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0013.html)）。本文使用模板"Python3 Demo"创建代码仓库。
   
   2. 进入代码仓库，将"pip.conf"文件上传至需要使用PyPI依赖包的代码仓库根目录中。
   
   3. 在代码仓库中找到"requirements.txt"文件并打开（若没有请[新建文件](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0202.html)），将依赖包配置添加到此文件中，本文中配置的值为：
      ```
      demo ==1.0
      ```
      ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002512397037.png)
      
   
   
   
   
3. 配置并执行编译构建任务。 
   1. 在代码仓库中，单击页面右上角"设置构建"，页面跳转至"新建编译构建任务"页面。 在页面中选择"Setuptools模板"，单击"下一步"。
      
   
   2. 编辑步骤"SetupTool构建"。
      - 工具版本按照实际选择，本文中选择"python3.6"。
      
      - 删除已有命令行，输入以下命令：
        ```
        # 可以通过此命令设置当前项目根目录下的pip.conf文件为配置文件
         export PIP_CONFIG_FILE=./pip.conf
         # 下载pypi组件
         pip install -r requirements.txt --no-cache-dir
        ```
        
      
      
      ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002510713450.png "点击放大")
      
   
   
   
   
4. 单击"新建并执行"，启动构建任务执行。 
   待任务执行成功时，查看构建任务详情，在日志中找到类似如下图所示红框中内容，说明编译构建任务从私有依赖库完成了依赖包下载并构建成功。
   ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002510983184.png "点击放大")
   
   
 
