Python项目参考手册

cooolr 于 2022-07-20 发布
  1. 正经的知识

     def get_table_update_count(table_name):
         update_count = 100
         return update_count
        
     if __name__ == "__main__":
         # 这一行的作用是这个文件被其他文件引用时,该结构内的代码不被引用执行
         get_table_update_count("dapp_name")
    
  2. 环境安装的选择
  3. IDE编辑器的选择
    • sublime text3 (适合单文件脚本)
    • vscode
    • PyCharm (最舒服的debug模式)
  4. 虚拟环境与项目环境
    • venv
      • 每个项目目录里面包含着所需的python环境,迁移方便,毕竟自带环境,缺点项目大
        # 创建环境
        python -m venv <env_path>
              
        # 进入环境:
        <env_path>\Scripts\activate.bat  # windows
        source <env_path>/bin/activate   # linux
              
        # 退出环境
        deactivate
              
        # 部署执行
        <项目绝对路径>/<env_path>/bin/python main.py
      
    • 系统环境
      • 所有项目共用安装在系统环境的python环境,最终导致环境冲突
    • conda
      • 最简单的虚拟环境管理器,虚拟环境路径不在项目目录里面
        # 创建环境
        conda create -n <env_name> python=3.6.5
              
        # 进入环境
        conda activate <env_name>    # windows
        source activate <env_name>   # linux
              
        # 退出环境
        conda deactivate    # windows
        deactivate          # linux
              
        # 部署执行
        <anaconda安装路径>/envs/<env_name>/bin/python main.py
      
    • virtualenv

        # 安装工具
        pip install virtualenv
      
  5. 项目工程化 (分层架构)

     dapp_spider/                     # 装着项目的文件夹
     ├── dapp_spider                  # 真正的项目目录
     │   ├── __init__.py              # package初始化文件
     │   ├── config                   # 配置层
     │   │   ├── __init__.py          # package初始化文件,每个package文件夹都要有
     │   │   ├── fat.py
     │   │   └── lpt.py
     │   ├── spider                   # 爬虫层
     │   │   ├── __init__.py
     │   │   ├── base_spider.py
     │   │   └── dapp_spider.py
     │   └── tools                    # 工具层
     │       ├── __init__.py
     │       └── html_escape.py
     ├── requirements.txt             # 项目依赖的第三方库都应该维护在这个文本
     └── setup.py                     # 项目打包配置文件
    
  6. 模块引用与package引用
    • python包导入原理
      • 按照sys.path列表中的目录顺序来查找导入文件
    • 当前路径引用

        # . 表示当前.py文件所在目录文件夹下
              
        # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py
        from .base_spider import baseSpider
      
    • 跨目录引用

        import sys
        # 手动把目录加到sys.path
        sys.path.append("../")
              
        # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py
        from spider.base_spider import baseSpider
      
    • 加环境变量引用

        # 手动把目录加到系统环境变量PYTHONPATH里面
              
        # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py
        from spider.base_spider import baseSpider
      
    • IDE内引用

        # IDE会把项目跟目录加入sys.path,也就是dapp_spider下面的内容在sys.path
              
        # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py
        from dapp_spider.base_spider import baseSpider
      
    • 打包引用

        # 使用setup.py打包配置文件,将dapp_spider项目打包,注册到python库目录site-packages
        # 可以无视所有限制,叫它一声必有回应
              
        # 当前视角为dapp_spider/dapp_spider/spider/dapp_spider.py
        from dapp_spider.base_spider import baseSpider
      
  7. 依赖库的安装和维护
    • 官方库查询以及库文档地址: pypi.org
    • pip install -r requirements.txt手动安装项目依赖
    • IDE可以发现项目内requirements.txt文件,一键安装项目依赖
  8. 编程范式的选择
    • 命令行编程
    • 函数式编程
    • 面向对象编程
  9. 编码风格的约定
    • 变量、函数以下划线风格命名
    • 常量以大写命名
    • 类以驼峰风格命名
    • 缩进以4个空格为单位,IDE会自动以4个空格为Tab键单位
    • 变量命名尽量体现含义,不要用a、b、i这种无意义变量名
    • 变量命名使用英文,拒绝使用拼音和方言
    • 函数,关键代码,算法实现加入必要的注释
    • 不要频繁转换变量类型,会增加代码理解难度
  10. 注释与单元测试
    • 注释
    def get_table_update_count(table_name):
        """
        返回指定表的近1小时更新数量
        Args:
            table_name (str):   指定表.
        Returns:
            update_count (int): 近1小时更新数量.
        """
        update_count = 100
        return update_count
    
  1. 项目打包部署
    • setup.py

        # -*- coding: utf-8 -*-
              
        from setuptools import setup, find_packages
              
        setup(
            name="dapp_spider",
            version="0.0.1",
            description="dapp_spider",
            long_description="dapp_spider",
            author="python",
            url="",
            license="",
            packages=find_packages()
        )
      
    • 部署

        # install部署, 把项目打包进site-packages里面,每次更新代码需要重新执行命令
        python setup.py install
              
        # develop部署, 把项目映射进site-packages里面,可以随时修改代码,只执行一次命令
        python setup.py develop
      
  2. Python之禅
Python 之禅,蒂姆·彼得斯 (Tim Peters)

美丽总比丑陋好。
显式优于隐式。
简单胜于复杂。
复杂胜于复杂。
平面优于嵌套。
稀疏比密集好。
可读性很重要。
特殊情况不足以打破规则。
虽然实用胜过纯洁。
错误永远不应该悄无声息地过去。
除非明确沉默。
面对模棱两可,拒绝猜测的诱惑。
应该有一种——最好只有一种——明显的方法来做到这一点。
虽然这种方式一开始可能并不明显,除非你是荷兰人。
现在总比没有好。
虽然从来没有现在通常比 *right* 更好。
如果实现很难解释,那是个坏主意。
如果实现很容易解释,那可能是个好主意。
命名空间是一个很棒的想法——让我们做更多的事情!