mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 06:07:20 +08:00 
			
		
		
		
	Fix Python build check script. (#911)
* Fix Python build check script. * Update python code check workflow * Update python test script. * Compatible with Python >=3.9 * Compatible with Python >=3.10 * Fix errors in Windows * test * Add Python version in installation.md * Update test_all.py
This commit is contained in:
		
							
								
								
									
										6
									
								
								.github/workflows/python.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/python.yml
									
									
									
									
										vendored
									
									
								
							@ -22,7 +22,7 @@ jobs:
 | 
				
			|||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
        os: [ubuntu-latest, macos-latest, windows-latest]
 | 
					        os: [ubuntu-latest, macos-latest, windows-latest]
 | 
				
			||||||
        python-version: ["3.8", "3.10"]
 | 
					        python-version: ["3.10", "3.11"]
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
      - name: Set up Python ${{ matrix.python-version }}
 | 
					      - name: Set up Python ${{ matrix.python-version }}
 | 
				
			||||||
@ -36,6 +36,6 @@ jobs:
 | 
				
			|||||||
      - name: Lint with black
 | 
					      - name: Lint with black
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          black codes/python
 | 
					          black codes/python
 | 
				
			||||||
      - name: Build with py_compile
 | 
					      - name: Test python code
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          python codes/python/build.py
 | 
					          python codes/python/test_all.py
 | 
				
			||||||
 | 
				
			|||||||
@ -1,20 +0,0 @@
 | 
				
			|||||||
import glob
 | 
					 | 
				
			||||||
import py_compile as pyc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
    # find source code files
 | 
					 | 
				
			||||||
    src_paths = sorted(glob.glob("codes/python/**/*.py"))
 | 
					 | 
				
			||||||
    num_src = len(src_paths)
 | 
					 | 
				
			||||||
    num_src_error = 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # compile python code
 | 
					 | 
				
			||||||
    for src_path in src_paths:
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            pyc.compile(src_path, doraise=True)
 | 
					 | 
				
			||||||
        except pyc.PyCompileError as e:
 | 
					 | 
				
			||||||
            num_src_error += 1
 | 
					 | 
				
			||||||
            print(e)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    print(f"===== Build Complete =====")
 | 
					 | 
				
			||||||
    print(f"Total: {num_src}")
 | 
					 | 
				
			||||||
    print(f"Error: {num_src_error}")
 | 
					 | 
				
			||||||
							
								
								
									
										32
									
								
								codes/python/test_all.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								codes/python/test_all.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					import os
 | 
				
			||||||
 | 
					import glob
 | 
				
			||||||
 | 
					import subprocess
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env = os.environ.copy()
 | 
				
			||||||
 | 
					env["PYTHONIOENCODING"] = "utf-8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					    # find source code files
 | 
				
			||||||
 | 
					    src_paths = sorted(glob.glob("codes/python/chapter_*/*.py"))
 | 
				
			||||||
 | 
					    errors = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # run python code
 | 
				
			||||||
 | 
					    for src_path in src_paths:
 | 
				
			||||||
 | 
					        process = subprocess.Popen(
 | 
				
			||||||
 | 
					            ["python", src_path],
 | 
				
			||||||
 | 
					            stdout=subprocess.PIPE,
 | 
				
			||||||
 | 
					            stderr=subprocess.PIPE,
 | 
				
			||||||
 | 
					            text=True,
 | 
				
			||||||
 | 
					            env=env,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        # Wait for the process to complete, and get the output and error messages
 | 
				
			||||||
 | 
					        stdout, stderr = process.communicate()
 | 
				
			||||||
 | 
					        # Check the exit status
 | 
				
			||||||
 | 
					        exit_status = process.returncode
 | 
				
			||||||
 | 
					        if exit_status != 0:
 | 
				
			||||||
 | 
					            errors.append(stderr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    print(f"Tested {len(src_paths)} files")
 | 
				
			||||||
 | 
					    print(f"Found exception in {len(errors)} files")
 | 
				
			||||||
 | 
					    if len(errors) > 0:
 | 
				
			||||||
 | 
					        raise RuntimeError("\n\n".join(errors))
 | 
				
			||||||
@ -17,7 +17,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Python 环境
 | 
					### Python 环境
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. 下载并安装 [Miniconda3](https://docs.conda.io/en/latest/miniconda.html) 。
 | 
					1. 下载并安装 [Miniconda3](https://docs.conda.io/en/latest/miniconda.html) ,需要 Python 3.10 或更新版本。
 | 
				
			||||||
2. 在 VSCode 的插件市场中搜索 `python` ,安装 Python Extension Pack 。
 | 
					2. 在 VSCode 的插件市场中搜索 `python` ,安装 Python Extension Pack 。
 | 
				
			||||||
3. (可选)在命令行输入 `pip install black` ,安装代码格式化工具。
 | 
					3. (可选)在命令行输入 `pip install black` ,安装代码格式化工具。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user