Аз съм опитен програмист, но не съм експерт по 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.