Day 6: GitHub Actions CI for the pcr_optimizer Python package
Gabor Szabo
Posted on December 6, 2022
Today I was quite busy and first worked on some other project that I hope will be done in a few days, but I also managed to add CI to a relatively simple Python package called pcr_optimizer.
When I first added GitHub Actions it failed to install the dependencies listed in the requirements.txt
file with a nasty error:
Collecting logging
Downloading logging-0.4.9.6.tar.gz (96 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.0/96.0 kB 33.1 MB/s eta 0:00:00
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'error'
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [27 lines of output]
Traceback (most recent call last):
File "<string>", line 2, in <module>
File "<pip-setuptools-caller>", line 14, in <module>
File "/opt/hostedtoolcache/Python/3.9.15/x64/lib/python3.9/site-packages/setuptools/__init__.py", line 18, in <module>
from setuptools.dist import Distribution
File "/opt/hostedtoolcache/Python/3.9.15/x64/lib/python3.9/site-packages/setuptools/dist.py", line 32, in <module>
from setuptools.extern.more_itertools import unique_everseen
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 666, in _load_unlocked
File "<frozen importlib._bootstrap>", line 565, in module_from_spec
File "/opt/hostedtoolcache/Python/3.9.15/x64/lib/python3.9/site-packages/setuptools/extern/__init__.py", line 52, in create_module
return self.load_module(spec.name)
File "/opt/hostedtoolcache/Python/3.9.15/x64/lib/python3.9/site-packages/setuptools/extern/__init__.py", line 37, in load_module
__import__(extant)
File "/opt/hostedtoolcache/Python/3.9.15/x64/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/__init__.py", line 1, in <module>
from .more import * # noqa
File "/opt/hostedtoolcache/Python/3.9.15/x64/lib/python3.9/site-packages/setuptools/_vendor/more_itertools/more.py", line 5, in <module>
from concurrent.futures import ThreadPoolExecutor
File "/opt/hostedtoolcache/Python/3.9.15/x64/lib/python3.9/concurrent/futures/__init__.py", line 8, in <module>
from concurrent.futures._base import (FIRST_COMPLETED,
File "/opt/hostedtoolcache/Python/3.9.15/x64/lib/python3.9/concurrent/futures/_base.py", line 7, in <module>
import logging
File "/tmp/pip-install-aq23csim/logging_1a1a3bc0ef754163a6f124b9848cdcfe/logging/__init__.py", line 618
raise NotImplementedError, 'emit must be implemented '\
^
SyntaxError: invalid syntax
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
Error: Process completed with exit code 1.
I recalled seeing this already, but I was not sure where. It looked like a Python 2 vs. Python 3 issue and started to scratch my head.
Then I noticed it is trying to install the logging module which comes with Python. There is no need to install. Maybe it was not coming with early versions of Python 2 ? I don't know. I think it was part of Python since I am using Python.
Anyway, I removed logging
from the requirements.txt
file.
I also had to set the PYTHONPATH
environment variable to let the tests find the module.
Finally, I noticed that __pycache__
was generated while I ran the tests on my computer. So I added it to the .gitignore
file to make sure this folder is not added to github by mistake.
That's it. The tests passed and I sent the Pull-Request.
Here is the configuration file:
name: CI
on:
push:
pull_request:
workflow_dispatch:
schedule:
- cron: '42 5 * * *'
jobs:
test:
strategy:
fail-fast: false
matrix:
runner: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.9", "3.10", "3.11"]
runs-on: ${{matrix.runner}}
name: OS ${{matrix.runner}} Python ${{matrix.python-version}}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: pip install -r requirements.txt
- name: Check Python version
run: python -V
- name: Test
env:
PYTHONPATH: .
run: python Tests/test_pcrprotocoloptimizer.py
Conclusion
Sometimes you need to make slight changes for the CI to start working.
Posted on December 6, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
December 13, 2022