diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 556378bde..e178e2e73 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -22,7 +22,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.8", "3.10"] + python-version: ["3.10", "3.11"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} @@ -36,6 +36,6 @@ jobs: - name: Lint with black run: | black codes/python - - name: Build with py_compile + - name: Test python code run: | - python codes/python/build.py + python codes/python/test_all.py diff --git a/codes/python/build.py b/codes/python/build.py deleted file mode 100644 index 98523f2c0..000000000 --- a/codes/python/build.py +++ /dev/null @@ -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}") diff --git a/codes/python/test_all.py b/codes/python/test_all.py new file mode 100644 index 000000000..1a371123a --- /dev/null +++ b/codes/python/test_all.py @@ -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)) diff --git a/docs/chapter_appendix/installation.md b/docs/chapter_appendix/installation.md index 5f2ab5e73..652f33b93 100644 --- a/docs/chapter_appendix/installation.md +++ b/docs/chapter_appendix/installation.md @@ -17,7 +17,7 @@ ### 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 。 3. (可选)在命令行输入 `pip install black` ,安装代码格式化工具。