Skip to content

Instantly share code, notes, and snippets.

@erral
Last active September 14, 2023 12:52
Show Gist options
  • Save erral/3083720 to your computer and use it in GitHub Desktop.
Save erral/3083720 to your computer and use it in GitHub Desktop.
python eta garapen ingurunearen prestaketa

Hauexek dira gure garapen ingurunea instalatzeko behar ditugunak (Ubuntu 23.04 bertsioan probatuta):

SSH

Exekutatu komando hauek:

sudo apt-get install openssh-client openssh-server
ssh-keygen

Kopiatu ~/.ssh/id_rsa.pub fitxategiaren edukia, fitxategi honen bukaeran, zerbitzarietan automatikoki eguneratzeko: https://gitlab.com/codesyntax/ansible/blob/master/roles/common/files/ssh_keys_csmant

Sortu ~/.ssh/config fitxategia eta bertan idatzi hau:

ForwardAgent yes

Host *
   TCPKeepAlive yes
   ServerAliveInterval 120
   ServerAliveCountMax 3

Hori eginda beste zerbitzari batera sartzen bagara eta hirugarren batera SSH egiten badugu, gure klabe publikoa erabili daiteke login egiteko. Oso egokia anbototik zerbitzarietara sartzeko edo githubeko errepositorioak kanpoko zerbitzarietan SSH bidez klonatzeko. Gainera SSHko timeout-ak ekidingo ditugu.

Oinarrizko paketeak

Sisteman bai ala bai izan behar ditugun paketeak:

sudo apt-get install lsb-release build-essential subversion-tools git libxslt1-dev libxml2-dev libjpeg8 libjpeg8-dev libfreetype6 libfreetype6-dev libssl-dev ntpdate screen unzip libzip-dev libzzip-dev libzzip-0-13 zlib1g-dev zlib1g libtar0 libtar-dev liblz1 liblz-dev git libbz2-dev vim python3 python3-dev curl net-tools whois gitk direnv poedit unrar libffi-dev python3-pip lynx default-libmysqlclient-dev libreadline-dev liblzma-dev sqlite3 libsqlite3-dev

git konfiguratu

Sortu ~/.gitconfig fitxategi bat eta bertan eduki hau gehitu (ordezkatu zure izena eta epostarekin):

[user]
    name = IZENA
    email = EPOSTA
[core]
    excludesfile = ~/.gitignore
    editor = nano
    # Highlight whitespace errors in git diff:
    whitespace = tabwidth=4,tab-in-indent,cr-at-eol,trailing-space
	fileMode = false
	filemode = false
[http]
    sslVerify = false
[branch]
    autosetuprebase = always
[alias]
    foo = log --graph --decorate --pretty=oneline --abbrev-commit --all
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
    type = cat-file -t
    dump = cat-file -p
    st = status
    ci = commit
    br = branch
    co = checkout
    df = diff
    dfs = diff --staged
    undo = reset --soft HEAD^

    # A log of commits indicating where various branches are currently pointing.
    lga = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative --branches --remotes
    fulllog = log --graph --decorate --pretty=oneline --abbrev-commit --all
    # "git weburl" prints the URL of the github project page for repositories hosted on github.
    weburl = !git config --get remote.origin.url | sed -e 's/git:\\/\\/github.com/https:\\/\\/github.com/' -e 's/[email protected]:/https:\\/\\/github.com\\//' -e 's/\\.
git$//'
    # "git browse" opens the github project page of this repository in the browser.
    browse = !open `git weburl`


# pretty colors, yay!
[color]
    diff = auto
    status = auto
    branch = auto
[push]
    default = simple

[init]
	defaultBranch = main


Garapenerako MailHog posta zerbitzaria instalatu

Horrela zure makinatik ez da eposta mezurik irtengo eta denak web interfaze txukun baten ikusiko dituzu:

Agian hau egin aurretik zure makinan instalatutako exim edo edo beste eposta zerbitzariren bat ezabatu beharko duzu:

apt remove --purge exim* postfix*

Ikusi: https://gist.github.com/erral/c7ff9b6b40aa75b0f10a701ec9fc9e4c

Python bertsio gehigarriak

Ubuntu eta Debian instalazioek python bertsio jakin batzuk dakartzate. Batzuetan garapenak beste python bertsio batzuekin egin behar ditugu beraz python bertsio gehigarriak instalatzeko pyenv erabiliko dugu. Sistemaren errepositorietan datorren python2 bertsioarekin arazoak izan ditugu, beraz python2 behar badugu, hori ere pyenv bidez instalatuko dugu.

curl https://pyenv.run | bash

Begiratu adi aurreko komandoaren bukaerari, zure ~/.bashrc fitxategian lerro batzuk gehitzeko eskatuko dizu. Horrelako zerbait gehitu beharko duzu:

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Egindako aldaketak aktibatzeko terminala itxi eta berriz ireki beharko duzu.

Ondoren, python bertsioak instalatzeko hauxe egin:

pyenv install 3.11
pyenv install 2.7
pyenv global 3.11

Terminala itxi eta beste bat ireki. Horrela python bertsio guztiak globalki disponible egongo dira. Lehenengo jarri duguna izango da lehenetsitakoa. pip erabiliz instalazioak egiten baditugu python hauetan egingo dira instalazioak.

Kontuan izan hemendik aurrera hor adierazitako python bertsioa izango dela python exekutatzen dugunean erabiliko dena.

Momenturen baten zerbait probatzeko beste python bertsio bat erabili nahi badugu zera egin beharko dugu:

pyenv shell 3.7
python

Horrekin 3.7 bertsiko python terminal bat irekiko du.

Bestalde karpeta edo proiektu jakin baten beti python bertsio jakin bat erabili nahi badugu, zera egin dezakegu:

pyenv local 2.4.6

Horrekin .python-version izeneko fitxategi bat sortuko du karpeta horretan, eta terminalaren bidez karpeta horretara sartzen garenean, pyenv-ek fitxategian adierazitako python bertsioa aktibatuko du automatikoki. Node-ren munduan .nvmrc fitxategiarekin lortzen den gauza berdina lortuko dugu horrela.

Virtualenvak nola sortu

$ pyenv install 3.11.1
$ pyenv virtualenv 3.11.1 myproject-py3.11
$ cd <your-project-directory>
$ pyenv local myproject-py3.11

Garapenerako pakete laguntzaileak instalatu:

pip install pipx
pipx install black==21.12b0 --pip-args click==8.0.2
pipx install pylint 
pipx install flake8
pipx install pycodestyle 
pipx install zpretty
pipx install isort
pipx install djlint

Visual Studio Coderen instalazioa

Eskatu sysadmin lantaldeari Visual Studio Coderen konfigurazioa egiteko jarraibideak.

  • Zure $HOMEan .isort.cfg izeneko fitxategi bat sortu eduki honekin (konfigurazio fitxategi hau Ploneren estilo gidatik aterata dago:
[settings]
profile = plone
  • Zure $HOMEan .editorconfig izeneko fitxategi bat sortu eduki honekin:
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org

root = true

[*]
indent_style = space
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8

[{*.py,*.cfg}]
indent_size = 4

[{*.html,*.dtml,*.pt,*.zpt,*.xml,*.zcml,*.js,*.yml,*.yaml}]
indent_size = 2

[Makefile]
indent_style = tab


[*.md]
trim_trailing_whitespace = false

Buildout katxea prestatu

Horrela buildout bidez deskargatzen diren gauza guztiak leku berera joango dira:

cd
mkdir -p downloads/eggs
mkdir .buildout
cd .buildout
gedit default.cfg

Eduki hau kopiatu bertan:

[buildout]
eggs-directory = /home/ZUREERABILTZAILEA/downloads/eggs
download-directory = /home/ZUREERABILTZAILEA/downloads
download-cache = /home/ZUREERABILTZAILEA/downloads
extends-cache = /home/ZUREERABILTZAILEA/downloads

Gure paketeen bertsioak sortzeko scripta prestatu

Python pakete baten bertsio bat egiteko fullrelease komandoa erabiltzen dugu. Hori prestatu:

cd
pipx install zest.releaser[recommended]==6.22.2 --pip-args "zest.pocompile cs.zestreleaser.upload cs.zestreleaser.changelog cs.zestreleaser.eggbuilder"

Editatu ~/.pypirc fitxategia eta bere edukia honekin ordezkatu:

[distutils]
index-servers =
  pypi

[pypi]
  
  
[zest.releaser]
release = yes
no-input = false
extra-message = [ci skip]

[cs.zestreleaser.upload]
_default_with_input_ = scp://[email protected]//var/www/static/

git-prompt konfiguratu

Shell-ean uneko karpeta git-eko zein branch-ekin sinkronizatuta dagoen ikusteko:

wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh

Gero editatu ~/.bashrc eta gehitu hau:

# Git prompt
source ~/.git-prompt.sh

# Show git prompt
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1 "(%s)")\$ '
export PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\W\a\]$PS1"

Itxi eta ireki terminala aldaketak aplikatzeko.

Plone proiektuetako PO fitxategi-sorkuntza

i18ndude scripta prestatu:

pipx install i18ndude

Instalatu plonecli/bobtemplates plone paketeen sorkuntzarako

pipx install plonecli --pip-args "bobtemplates.cs"

Gero erabiltzeko:

plonecli --list-templates  
plonecli create cs_plone_buildout myproject

Instalatu cookiecutter

Cooekicutter paketeen kode egiturak sortzeko scripta da. Plonen plonecli erabiltzen dugun bezala estandarragoa da cookiecutter. Cookiecutter script bat besterik ez da, hau da, txantiloi bat erabili behar dugunean cookiecutter-i parametro bezala pasatu behar diogu.

Beraz lehenengo cookiecutter bera instalatuko dugu:

pipx install cookiecutter

Eta ondoren, adibide gisa python pakete bat sortu dezakegu cookiecutter hori erabiliz:

cookiecutter https://github.com/audreyfeldroy/cookiecutter-pypackage.git

Horrelako pila bat txantiloi dago, bilatu Googlen.

Instalatu nvm node bertsio ezberdinen arteko borrokak ekiditeko:

Ikusi https://github.com/nvm-sh/nvm

Instalatu zure .bashrc fitxategian karpeta baten .nvmrc fitxategi bat badago berau automatikoki exekutatzeko komandoak, ikusi https://stackoverflow.com/a/48322289/1427863

Docker

Docker kontenedoreetan oinarritutako birtualizazio tresna da. Honekin, zure makinan, hainbat zerbitzu gehigarri instalatu ditzakezu aurrekonfiguratutako kontenedoreetan oinarrituta. Tresna oso erabilgarria da sisteman instalatzeko astunak diren zerbitzuak martxan jartzeko (datu-baseak, cache zerbitzariak, hirugarrenen aplikazioak, dependentzia asko dituztenak, ...). Jarraitu dokumentazio ofizialeko gida Docker instaltzeko:

erabilpen adibidea

Plone 6 huts bat martxan jartzeko

docker run -p 8080:8080 plone/plone-backend 

Redis zerbitzari bat martxan jartzeko:

docker run -p 6379:6379 redis

mysql eta adminer interfaze bat martxan jartzeko:

@erral
Copy link
Author

erral commented Dec 18, 2012

Gehituta. Eskerrik asko.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment