Skip to content

Commit 5a98bb8

Browse files
committed
Split up requirements into dev and prod files
This breaks up requirements.in into two files. The dev spec file, requirements.dev.txt, has a constraint on the compiled prod file so that we can both avoid duplicating requirements between the files but also avoid conflicting requirements. By doing a compile on new files we're going to get brand new versions, effectively doing an upgrade to everything. So this commit maintains the existing requirements.txt purely to constrain the compilation and avoid this situation.
1 parent a0453b2 commit 5a98bb8

7 files changed

Lines changed: 309 additions & 17 deletions

File tree

.github/workflows/python-tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ jobs:
3030
with:
3131
python-version: "3.10"
3232
cache: "pip"
33-
cache-dependency-path: requirements.txt
33+
cache-dependency-path: requirements.*.txt
3434

3535
- name: Install Python dependencies
3636
run: |
3737
python -m pip install --upgrade pip
38-
pip install -r requirements.txt
38+
pip install -r requirements.prod.txt -r requirements.dev.txt
3939
4040
- name: Run pre-commit
4141
run: |

Makefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ help:
44
@echo " make test: runs the tests."
55
@echo " make build: install as for a deployed environment."
66
@echo " make run-prod: run webserver as in deployed environment."
7+
@echo " make compile: compile the requirements specs."
78

89
test:
910
coverage run -m pytest -vvv
@@ -14,11 +15,15 @@ mypy:
1415
git diff --exit-code mypy-ratchet.json
1516

1617
build:
17-
pip install -r requirements.txt
18+
pip install -r requirements.prod.txt -r requirements.dev.txt
1819
python manage.py collectstatic --no-input
1920
rm --force ccbv.sqlite
2021
DATABASE_URL=sqlite:///ccbv.sqlite python manage.py migrate
2122
DATABASE_URL=sqlite:///ccbv.sqlite python manage.py load_all_django_versions
2223

2324
run-prod:
2425
DATABASE_URL=sqlite:///ccbv.sqlite gunicorn core.wsgi --log-file -
26+
27+
compile:
28+
pip-compile requirements.prod.in --output-file=requirements.prod.txt --constraint requirements.txt
29+
pip-compile requirements.dev.in --output-file=requirements.dev.txt --constraint requirements.txt

README.markdown

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ First you should install some OS libraries required for some packages, this can
4444

4545
sudo apt-get install python3-dev libmemcached-dev zlib1g-dev libpq-dev
4646

47-
After this, install as you normally would a Django site (requirements.txt provided).
47+
After this, install as you normally would a Django site (requirements files are provided).
4848

4949
e.g. (inside your virtualenv or whatever)
5050

51-
pip install -r requirements.txt
51+
pip install -r requirements.prod.txt -r requirements.dev.txt
5252

5353
Prepare the database (assuming you've got required database)
5454

@@ -77,10 +77,9 @@ If you hope to contribute any code, please install `pre-commit` before committin
7777

7878

7979
## Updating Requirements
80+
Add or remove the dependency from either `requirements.prod.in` or `requirements.dev.in` as appropriate.
8081

81-
Run `pip-compile` and `requirements.txt` will be updated based on the specs in `requirements.in`.
82-
83-
More details can be found on the [pip-tools](https://github.com/nvie/pip-tools) website.
82+
Run `make compile` and appropriate txt file will be updated.
8483

8584

8685
## Updating for New Versions of Django

requirements.dev.in

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--constraint requirements.prod.txt
2+
3+
coverage[toml]
4+
factory_boy
5+
mypy
6+
mypy-json-report>=0.1.3
7+
pre-commit
8+
pytest
9+
pytest-django
10+
pytest-subtests
11+
types-requests

requirements.dev.txt

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
#
2+
# This file is autogenerated by pip-compile with Python 3.10
3+
# by the following command:
4+
#
5+
# pip-compile --constraint=requirements.txt --output-file=requirements.dev.txt requirements.dev.in
6+
#
7+
attrs==21.4.0
8+
# via
9+
# -c requirements.prod.txt
10+
# -c requirements.txt
11+
# pytest
12+
backports-entry-points-selectable==1.2.0
13+
# via
14+
# -c requirements.txt
15+
# virtualenv
16+
cfgv==3.3.1
17+
# via
18+
# -c requirements.txt
19+
# pre-commit
20+
coverage[toml]==6.5.0
21+
# via
22+
# -c requirements.txt
23+
# -r requirements.dev.in
24+
distlib==0.3.3
25+
# via
26+
# -c requirements.txt
27+
# virtualenv
28+
factory-boy==3.2.0
29+
# via
30+
# -c requirements.txt
31+
# -r requirements.dev.in
32+
faker==9.3.1
33+
# via
34+
# -c requirements.txt
35+
# factory-boy
36+
filelock==3.3.0
37+
# via
38+
# -c requirements.txt
39+
# virtualenv
40+
identify==2.3.0
41+
# via
42+
# -c requirements.txt
43+
# pre-commit
44+
iniconfig==1.1.1
45+
# via
46+
# -c requirements.txt
47+
# pytest
48+
mypy==0.931
49+
# via
50+
# -c requirements.txt
51+
# -r requirements.dev.in
52+
mypy-extensions==0.4.3
53+
# via
54+
# -c requirements.txt
55+
# mypy
56+
mypy-json-report==0.1.3
57+
# via
58+
# -c requirements.txt
59+
# -r requirements.dev.in
60+
nodeenv==1.6.0
61+
# via
62+
# -c requirements.txt
63+
# pre-commit
64+
packaging==21.3
65+
# via
66+
# -c requirements.prod.txt
67+
# -c requirements.txt
68+
# pytest
69+
platformdirs==2.4.0
70+
# via
71+
# -c requirements.txt
72+
# virtualenv
73+
pluggy==1.0.0
74+
# via
75+
# -c requirements.txt
76+
# pytest
77+
pre-commit==2.15.0
78+
# via
79+
# -c requirements.txt
80+
# -r requirements.dev.in
81+
py==1.11.0
82+
# via
83+
# -c requirements.txt
84+
# pytest
85+
pyparsing==3.0.6
86+
# via
87+
# -c requirements.prod.txt
88+
# -c requirements.txt
89+
# packaging
90+
pytest==7.1.2
91+
# via
92+
# -c requirements.txt
93+
# -r requirements.dev.in
94+
# pytest-django
95+
# pytest-subtests
96+
pytest-django==4.5.2
97+
# via
98+
# -c requirements.txt
99+
# -r requirements.dev.in
100+
pytest-subtests==0.8.0
101+
# via
102+
# -c requirements.txt
103+
# -r requirements.dev.in
104+
python-dateutil==2.8.2
105+
# via
106+
# -c requirements.txt
107+
# faker
108+
pyyaml==6.0.1
109+
# via
110+
# -c requirements.txt
111+
# pre-commit
112+
six==1.16.0
113+
# via
114+
# -c requirements.prod.txt
115+
# -c requirements.txt
116+
# python-dateutil
117+
# virtualenv
118+
text-unidecode==1.3
119+
# via
120+
# -c requirements.txt
121+
# faker
122+
toml==0.10.2
123+
# via
124+
# -c requirements.txt
125+
# pre-commit
126+
tomli==2.0.0
127+
# via
128+
# -c requirements.txt
129+
# coverage
130+
# mypy
131+
# pytest
132+
types-requests==2.27.7
133+
# via
134+
# -c requirements.txt
135+
# -r requirements.dev.in
136+
types-urllib3==1.26.7
137+
# via
138+
# -c requirements.txt
139+
# types-requests
140+
typing-extensions==4.0.1
141+
# via
142+
# -c requirements.txt
143+
# mypy
144+
virtualenv==20.8.1
145+
# via
146+
# -c requirements.txt
147+
# pre-commit
Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
11
attrs>=21.4.0
22
blessings
3-
coverage[toml]
43
django~=3.1.14
54
django-extensions
65
django-pygmy
76
django-sans-db>=1.2.0
87
environs[django]
9-
factory_boy
108
gunicorn
11-
mypy
12-
mypy-json-report>=0.1.3
13-
pre-commit
149
psycopg2-binary>=2.9.5
15-
pytest
16-
pytest-django
17-
pytest-subtests
1810
requests
1911
# New versions aren't supported yet
2012
sphinx==1.2.2
21-
types-requests
2213
werkzeug
2314
whitenoise

requirements.prod.txt

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
#
2+
# This file is autogenerated by pip-compile with Python 3.10
3+
# by the following command:
4+
#
5+
# pip-compile --constraint=requirements.txt --output-file=requirements.prod.txt requirements.prod.in
6+
#
7+
asgiref==3.4.1
8+
# via
9+
# -c requirements.txt
10+
# django
11+
attrs==21.4.0
12+
# via
13+
# -c requirements.txt
14+
# -r requirements.prod.in
15+
blessings==1.7
16+
# via
17+
# -c requirements.txt
18+
# -r requirements.prod.in
19+
certifi==2022.12.7
20+
# via
21+
# -c requirements.txt
22+
# requests
23+
charset-normalizer==2.0.7
24+
# via
25+
# -c requirements.txt
26+
# requests
27+
dj-database-url==0.5.0
28+
# via
29+
# -c requirements.txt
30+
# environs
31+
dj-email-url==1.0.6
32+
# via
33+
# -c requirements.txt
34+
# environs
35+
django==3.1.14
36+
# via
37+
# -c requirements.txt
38+
# -r requirements.prod.in
39+
# django-extensions
40+
django-cache-url==3.4.2
41+
# via
42+
# -c requirements.txt
43+
# environs
44+
django-extensions==3.1.3
45+
# via
46+
# -c requirements.txt
47+
# -r requirements.prod.in
48+
django-pygmy==0.1.5
49+
# via
50+
# -c requirements.txt
51+
# -r requirements.prod.in
52+
django-sans-db==1.2.0
53+
# via
54+
# -c requirements.txt
55+
# -r requirements.prod.in
56+
docutils==0.17.1
57+
# via
58+
# -c requirements.txt
59+
# sphinx
60+
environs[django]==9.5.0
61+
# via
62+
# -c requirements.txt
63+
# -r requirements.prod.in
64+
gunicorn==20.1.0
65+
# via
66+
# -c requirements.txt
67+
# -r requirements.prod.in
68+
idna==3.3
69+
# via
70+
# -c requirements.txt
71+
# requests
72+
jinja2==3.0.2
73+
# via
74+
# -c requirements.txt
75+
# sphinx
76+
markupsafe==2.0.1
77+
# via
78+
# -c requirements.txt
79+
# jinja2
80+
marshmallow==3.18.0
81+
# via
82+
# -c requirements.txt
83+
# environs
84+
packaging==21.3
85+
# via
86+
# -c requirements.txt
87+
# marshmallow
88+
psycopg2-binary==2.9.5
89+
# via
90+
# -c requirements.txt
91+
# -r requirements.prod.in
92+
pygments==2.10.0
93+
# via
94+
# -c requirements.txt
95+
# django-pygmy
96+
# sphinx
97+
pyparsing==3.0.6
98+
# via
99+
# -c requirements.txt
100+
# packaging
101+
python-dotenv==0.21.0
102+
# via
103+
# -c requirements.txt
104+
# environs
105+
pytz==2021.3
106+
# via
107+
# -c requirements.txt
108+
# django
109+
requests==2.26.0
110+
# via
111+
# -c requirements.txt
112+
# -r requirements.prod.in
113+
six==1.16.0
114+
# via
115+
# -c requirements.txt
116+
# blessings
117+
sphinx==1.2.2
118+
# via
119+
# -c requirements.txt
120+
# -r requirements.prod.in
121+
sqlparse==0.4.2
122+
# via
123+
# -c requirements.txt
124+
# django
125+
urllib3==1.26.7
126+
# via
127+
# -c requirements.txt
128+
# requests
129+
werkzeug==2.0.2
130+
# via
131+
# -c requirements.txt
132+
# -r requirements.prod.in
133+
whitenoise==5.3.0
134+
# via
135+
# -c requirements.txt
136+
# -r requirements.prod.in
137+
138+
# The following packages are considered to be unsafe in a requirements file:
139+
# setuptools

0 commit comments

Comments
 (0)