TK-IT / meta

Diskussioner, referater, dokumentation mm.
0 stars 0 forks source link

Brug pipenv Pipfiles i stedet for requirements.txt #26

Open tyilo opened 6 years ago

tyilo commented 6 years ago

Jeg synes vi skal bruge Pipfiles i stedet for requirements.txt i vores forskellige repos.

Pros:

Cons:

Hvad tænker I andre?

tyilo commented 6 years ago

@Mortal @neic ping :)

Mortal commented 6 years ago

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).

neic commented 6 years ago

Jeg har ikke haft tid til at kigge på det i dybden, men fra readme filen ser det fornuftigt ud.

Mortal commented 6 years ago

@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
tyilo commented 6 years ago

Hvilken version af python bruger vi i production? (Nyere Pipfiles indeholder specifik version, f.eks. "3.5" eller "3.7")

neic commented 6 years ago

@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)

tyilo commented 6 years ago

Næ, men det kræver jo bare at 3.6 er installeret på serveren.

Mortal commented 6 years ago

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...

tyilo commented 6 years ago

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

tyilo commented 6 years ago

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)) 
tyilo commented 6 years ago

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.

tyilo commented 6 years ago

Se https://github.com/TK-IT/web/pull/203

neic commented 6 years ago

Følgende repo har (haft) requirements.txt:

tyilo commented 4 years ago

Jeg er selv gået over til at bruge poetry nu.

neic commented 4 years ago

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.