Аз съм опитен програмист, но не съм експерт по Python.

Напоследък навлизам все повече и повече в ML и така взаимодействам повече с Python.

Ще бъда честен и ще призная, че съм избягвал Python, тъй като ме разочарова.

Но единственият инструмент, който не се оплаква, е инструментът, който никога не се използва. Всичко полезно има своите недостатъци. :)

Как се справям с Python и запазвам здравия си разум

Подобно на много „ранни“ езици, Python има проблем с управлението на зависимостите и версиите. Това IMHO е сърцето на повечето проблеми в Python и тормози езика откакто го знам.

Приех следните инструменти и модели, които към днешна дата работят добре, за да изолират среди и да ме поддържат продуктивен.

Pipenv

Използвам следните променливи на средата за разработка директно на моя лаптоп хардуер:

# pipenv create .venv in local project dir similar to node_modules export PIPENV_VENV_IN_PROJECT=1 
export PIPENV_VERBOSITY=-1

Горното ще създаде директория .venv в основата на проекта. Това позволява на VSCode автоматично да открива виртуалната среда за неща като завършване на код, изпълнение на терминален CLI и т.н.

Самият Pipfile изглежда „добре“ за улавяне на зависимости. Сигурен съм, че има разочарования около транзитивната обработка на зависимости и т.н., но работи достатъчно добре за това, което е. Имайте предвид, че изборът на този инструмент е сърцето на „битката“ за Python, така че тази препоръка може да се промени в бъдеще и е тази, от която съм най-малко доволен.

„Отдалечена“ разработка на VSCode

Вероятно ще трябва да внедрите код на Python в среда, подобна на Linux.

Лично аз открих, че през годините е по-лесно да се развивам в среда, възможно най-близка до „производствената среда“.

Контейнерната разработка е „трябва да има“ за „сериозен Python“ IMHO. Основният случай на използване на този език (AI/ML) включва използването му като „свързващ език“. По-голямата част от тежката работа ще се извърши в кода на „родната библиотека“. През 2022 г. ‘native’ === ‘Някои специфичен вариант на Linux’.

Настройка за разработка в контейнери можете да намерите тук: https://code.visualstudio.com/docs/remote/containers-tutorial

ЗАБЕЛЕЖКА: Ще трябва да (пре)инсталирате плъгина Python VSCode като „плъгин за отдалечена разработка“ https://marketplace.visualstudio.com/items?itemName=ms-python.python след като създадете своя контейнер.

След първоначалната настройка на вашия „отдалечен контейнер“ (което е малко погрешно название IMHO):

Към .devcontainer/devcontainer.json добавете:

"remoteEnv": {
		"PIPENV_VENV_IN_PROJECT":"1",
		"PIPENV_VERBOSITY":"-1"
	}

Препоръчвам също да добавите към същия файл:

"postCreateCommand": "touch /root/.bashrc"

Тъй като повечето контейнери няма да бъдат настроени за root интерактивна обвивка

Препоръчваме да използвате същия Dockerfile, който ще бъде в производство за разработка (или поне възможно най-близо) и да използвате опцията „Отдалечен контейнер от Dockerfile“, когато настройвате VSCode „Отдалечен контейнер“.

Примерен Dockerfile за игра с Python

FROM ubuntu:22.04 RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata 
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:deadsnakes/ppa
RUN apt-get install -y python3.9
RUN apt-get install -y python3.9-distutils
RUN apt-get install -y pip
# Fix annoying deprecated warning Bug https://askubuntu.com/a/1407138 
RUN pip install --upgrade --user setuptools==58.3.0 RUN pip install pipenv

Обобщение и прогноза

Python, използван за ML, е „слепващ език“ с неприятна история за управление на зависимости и езикова съвместимост.

За щастие има инструменти/техники като контейнери на Docker и виртуални среди на Python, които човек може да приеме, за да се възползва максимално от объркана ситуация.

Прогнози:

  • Pipenv/Pipfile вероятно ще бъде заменен, но .venv или негов еквивалент/предшественик е тук, за да остане и иска да живее в папката на проекта.
  • „Отдалеченото“ разработване на контейнери все повече ще се превръща в призната стандартна техника за разработка.
  • Тъй като ML треската постепенно се превръща в отделна дисциплина, необходимостта от Python ще бъде заменена, когато общността се сближи с признат „език за сглобяване“, който може да се изпълнява на всяка съответна „виртуална машина“ (вероятно базирана на Tensorflow или ONNX, след като се съгласят нещо като 'POSIX' I/O слой/стандарт). Точно както „WASM“/„WASI“ премахва необходимостта от използване на езика Javascript за „уеб разработка“.
  • Python ще продължи да съществува в близкото бъдеще като много клеветена необходимост и ще изпълнява подобна функция като „Bash“ днес: грозен, универсален и „достатъчно добър“.

Първоначално публикувано на https://github.com/matthewjosephtaylor.