Open tyilo opened 6 years ago
@Mortal @neic ping :)
Det lader til at det for nylig er blevet den officielle måde at gøre tingene på, og jeg har prøvet at bruge det i et lille projekt, hvor det fungerer fint. Vi skal bare have committet Pipfile
og Pipfile.lock
i hver repo og skrevet en instruks i hver README at man skal pip install pipenv
og bruge pipenv install --three
for at sætte et venv op og pipenv shell
for at aktivere venv'et (i en ny shell-proces, i modsætning til . venv/bin/activate
fremgangsmåden).
Jeg har ikke haft tid til at kigge på det i dybden, men fra readme filen ser det fornuftigt ud.
@Tyilo Vil du lave Pipfiles til vores repos? Jeg har kigget https://github.com/TK-IT/web/blob/master/requirements.txt igennem, og jeg tror følgende dependencies bliver brugt direkte af os:
django>=1.11,<1.11.99
pillow>=2.6,<=5.0.0
sorl-thumbnail>=12.3
django-versatileimagefield>=1.6
git+https://github.com/CalPolyResDev/django-jfu#egg=django-jfu # tkweb/apps/gallery/
django-bootstrap3>=6.2.2
icalendar>=3.9.1
django-constance[database]>=1.1.1
django-macros>=0.4.0 # {% load repeatedblocks %}
unidecode>=0.04.19
mysqlclient>=1.3.7
django-multiupload==0.5.2 # tkweb/apps/mailinglist/
git+https://github.com/TK-IT/tktitler.git@v1.0.0#egg=tktitler
git+https://github.com/django-wiki/django-wiki.git#egg=wiki # django-wiki>=0.4a3 is needed
django-mediumeditor==0.2.0 # tkweb/apps/regnskab/
jsonfield # tkweb/apps/regnskab/
html2text # tkweb/apps/regnskab/
numpy # tkweb/apps/regnskab/
scipy # tkweb/apps/regnskab/
matplotlib # tkweb/apps/regnskab/
Og følgende er ikke brugt direkte af os, men er blot afledt af ovenstående dependencies:
pytz>=2015.2
django-cleanup>=0.4.2
django-model-utils>=2.5
Hvilken version af python bruger vi i production? (Nyere Pipfiles indeholder specifik version, f.eks. "3.5" eller "3.7")
@Tyilo
(tkweb-prod) neic@prodekanus:/home/tkammer/tkweb$ python --version
Python 3.5.2
Men det skulle vel ikke være et problem at bruge 3.6
? (3.7
er måske lige ny nok)
Næ, men det kræver jo bare at 3.6
er installeret på serveren.
Understøtter pipenv at man installerer en Python 3.5 Pipfile i et Python 3.6 venv? Ellers bliver det træls for tkweb-udviklere der ikke har Python 3.5 installeret...
Det ser ud til at man bare kan fjerne
[requires]
python_version = "3.5"
Det ser dog ikke ud til at man kan specificere mindst version 3.5
: https://github.com/pypa/pipenv/issues/1071
I følge pipenv graph
er dependency grafen:
django-bootstrap3==10.0.1
django-cleanup==2.1.0
django-constance==2.2.0
django-jfu==2.0.9
django-macros==0.4.0
- django [required: >=1.6, installed: 1.11.14]
- pytz [required: Any, installed: 2018.5]
django-mediumeditor==0.2.0
- django-appconf [required: >=1.0.2, installed: 1.0.2]
django-model-utils==3.1.2
- Django [required: >=1.8, installed: 1.11.14]
- pytz [required: Any, installed: 2018.5]
django-multiupload==0.5.2
- django [required: Any, installed: 1.11.14]
- pytz [required: Any, installed: 2018.5]
django-picklefield==1.0.0
django-versatileimagefield==1.9
- Pillow [required: >=2.4.0,<=5.0.0, installed: 5.0.0]
html2text==2018.1.9
icalendar==4.0.2
- python-dateutil [required: Any, installed: 2.7.3]
- six [required: >=1.5, installed: 1.11.0]
- pytz [required: Any, installed: 2018.5]
jsonfield==2.0.2
- Django [required: >=1.8.0, installed: 1.11.14]
- pytz [required: Any, installed: 2018.5]
matplotlib==2.2.2
- cycler [required: >=0.10, installed: 0.10.0]
- six [required: Any, installed: 1.11.0]
- kiwisolver [required: >=1.0.1, installed: 1.0.1]
- setuptools [required: Any, installed: 39.2.0]
- numpy [required: >=1.7.1, installed: 1.14.5]
- pyparsing [required: >=2.0.1,!=2.1.6,!=2.1.2,!=2.0.4, installed: 2.2.0]
- python-dateutil [required: >=2.1, installed: 2.7.3]
- six [required: >=1.5, installed: 1.11.0]
- pytz [required: Any, installed: 2018.5]
- six [required: >=1.10, installed: 1.11.0]
mysqlclient==1.3.13
scipy==1.1.0
- numpy [required: >=1.8.2, installed: 1.14.5]
tktitler==1.0.0
Unidecode==1.0.22
wiki==0.4a5
- bleach [required: >=2.1,<2.2, installed: 2.1.3]
- html5lib [required: >=0.99999999pre,!=1.0b8,!=1.0b7,!=1.0b6,!=1.0b5,!=1.0b4,!=1.0b3,!=1.0b2,!=1.0b1, installed: 1.0.1]
- six [required: >=1.9, installed: 1.11.0]
- webencodings [required: Any, installed: 0.5.1]
- six [required: Any, installed: 1.11.0]
- Django [required: >=1.11,<2.1, installed: 1.11.14]
- pytz [required: Any, installed: 2018.5]
- django-mptt [required: >=0.9,<0.10, installed: 0.9.0]
- django-js-asset [required: Any, installed: 1.1.0]
- django-nyt [required: >=1.1b1,<1.2, installed: 1.1b2]
- django [required: >=1.11,<2.0, installed: 1.11.14]
- pytz [required: Any, installed: 2018.5]
- django-sekizai [required: >=0.10, installed: 0.10.0]
- django-classy-tags [required: >=0.3.1, installed: 0.8.0]
- Django [required: >1.3, installed: 1.11.14]
- pytz [required: Any, installed: 2018.5]
- Markdown [required: >=2.6,<2.7, installed: 2.6.11]
- Pillow [required: Any, installed: 5.0.0]
- sorl-thumbnail [required: >=12,<13, installed: 12.4.1]
Dvs. django-cleanup
og django-model-utils
er enten direct dependencies eller bliver slet ikke brugt.
Følgende ser ikke ud til at være direct dependencies (medmindre vi selvfølgelig bruger dem direkte):
Pillow (krævet af wiki og django-versatileimagefield)
sorl-thumbnail (krævet af wiki)
(numpy (krævet af scipy, men lad os beholde den som explicit dependency))
Udover Django
skal være versioin 1.11.*
, er der så nogen grund til at specificere end bestemt version for de andre pakker?
Jeg synes ikke en minimumsversion giver mening uden også et max og der er kun 2 pakker (django-multiupload
og django-mediumeditor
) som er pinned til en specifik version. Jeg foreslår derfor følgende Pipenv
fil:
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
Django = "==1.11.*"
django-jfu = {git = "https://github.com/CalPolyResDev/django-jfu"}
tktitler = {ref = "v1.0.0", git = "https://github.com/TK-IT/tktitler.git"}
wiki = {git = "https://github.com/django-wiki/django-wiki.git"}
django-constance = {version = "*", extras = ["database"]}
django-versatileimagefield = "*"
"django-bootstrap3" = "*"
icalendar = "*"
django-macros = "*"
mysqlclient = "*"
django-multiupload = "*"
django-mediumeditor = "*"
jsonfield = "*"
"html2text" = "*"
numpy = "*"
scipy = "*"
matplotlib = "*"
Unidecode = "*"
[dev-packages]
Hvilket resulterer i samme pakker som ovenfor, bortset fra at django-mediumeditor
bliver opdateret fra version 0.2.0
til 1.0.0
.
Jeg bruger nu udelukket Docker med alle pakkerne installeret globalt. Vi er på arbejde lige begyndt at bruge pip-tools
og en requirements.in
. Den holder vi opdateret med Dependapot som laver PRs. Vores CI bygger et Docker image på hver push og tester det efterfølgende. Hvis der er god test coverage er det nemt at merge PRs fra Dependabot og være sikker på at alting stadig fungere.
EDIT: Og vigtigst: Den spytter bare en requirements.txt
ud, så det er bagudkompatibelt med alting.
Jeg synes vi skal bruge Pipfiles i stedet for
requirements.txt
i vores forskellige repos.Pros:
Cons:
pip install pipenv
)Hvad tænker I andre?