Python (Русский)
Состояние перевода: На этой странице представлен перевод статьи Python. Дата последней синхронизации: 28 мая 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
- Python package guidelines
- Виртуальное окружение
- mod_wsgi
- Django
- IDE#Python IDEs
Python — интерпретируемый, интерактивный, объектно-ориентированный язык программирования. Включает модули, исключения, динамическую типизацию, высокоуровневые типы данных и классы. Поддерживает различные парадигмы программирования помимо ООП, вроде процедурного и функционального программирования. Python соединил в себе впечатляющую мощь и простоту синтаксиса. В нём предусмотрены интерфейсы для многих системных вызовов и библиотек, а также оконных систем; возможно расширение с помощью С и С++. Помимо всего перечисленного, он может использоваться как язык расширений для приложений, которым необходим программный интерфейс. Наконец, Python портируем: он запускается на множестве вариантов Unix, включая Linux и macOS, а также Windows.
Установка
Другие версии
Старые и будущие версии Python доступны в AUR и могут быть полезны, если вас одолевает историческое любопытство, если старые приложения не запускаются на более новых версиях или если вам необходимо протестировать программы на возможность работы в дистрибутивах со старыми версиями интерпретатора:
- Python 3.12: python312AUR
- Python 3.10: python310AUR
- Python 3.9: python39AUR
- Python 3.8: python38AUR
- Python 3.7: python37AUR (не поддерживается)
- Python 3.6: python36AUR (не поддерживается)
- Python 2.7: python2AUR (не поддерживается)
Важно: Официальная поддержка Python 3.6 и более старых версий прекращена. Смотрите Status of Python versions.
Каждый из этих пакетов устанавливает отдельный исполняемый файл, содержащий в своём имени номер версии, например python3.7 для Python 3.7, что позволяет устанавливать несколько версий одновременно. Также можно использовать pyenv для лёгкой установки разных версий Python и переключения между ними.
Дополнительные модули/библиотеки для старых версий Python можно найти в AUR по слову pythonверсия_без_точки> . Например, введите python37 для поиска модулей версии 3.7.
Также можно скачать исходный код любой версии на странице https://www.python.org/downloads/.
Альтернативные реализации
Пакет python предоставляет CPython, стандартную реализацию Python, но существуют и другие реализации. Они обычно основаны на более старых версиях Python и лишь частично совместимы с CPython.
Доступные в Arch Linux реализации:
- PyPy — Реализация Python, написанная на Python. Улучшенная производительность и использование памяти по сравнению с CPython.
- Jython — Реализация языка Python на Java. Используется для встраивания сценариев Python в программы на Java или использования библиотек Java в программах на Python.
- micropython — Python для микроконтроллеров. Включает небольшое подмножество стандартной библиотеки Python; оптимизирован под запуск на микроконтроллерах в ограниченном окружении.
- IronPython — Реализация языка программирования Python, которая плотно интегрирована с .NET. Может использовать библиотеки .NET и позволяет .NET-программам использовать библиотеки Python.
Существуют и другие реализации. Некоторые из них, вроде Stackless, Pyston и Cinder, используются внутри больших технологических компаний. Другие имели некоторое значение в прошлом, но больше не поддерживаются из-за улучшений более популярных реализаций.
Альтернативные оболочки
Пакет python включает интерактивную оболочку/REPL Python, которая запускается командой python . Доступны также следующие оболочки:
- bpython — Приятный интерфейс для интерпретатора Python.
- IPython — Мощная интерактивная оболочка Python.
- Jupyter — Сетевое приложение на основе IPython.
- ptpython — Продвинутый Python REPL, собранный с prompt-toolkit.
Управление пакетами
Существует целый ряд способов установить пакет Python в Arch Linux:
- Официальные репозитории и AUR — большое количество популярных пакетов доступно в репозиториях Arch. Это предпочтительный вариант установки системных пакетов.
- pip(1) — Официальный установщик пакетов для Python. Используйте pip для установки пакетов из Python Package Index и других индексов.
- pipx — Связан с pip, но создаёт у запускающего его пользователя изолированную среду для каждого приложения и связанных с ним пакетов, предотвращая конфликты с системными пакетами. Ориентирован на пакеты, которые могут быть запущены из командной строки непосредственно как приложения. Вы можете использовать pipx для установки пакетов из Python Package Index и других источников.
- Anaconda — Открытая система управления пакетами и окружением, изначально созданная для программ Python. С помощью Conda можно устанавливать пакеты из репозиториев Anaconda.
- Miniconda — Легковесная альтернатива для Anaconda, которая устанавливает пакетный менеджер, но не устанавливает пакеты для научных вычислений по умолчанию.
При установке пакетов с помощью pip рекомендуется использовать виртуальное окружение (или управление окружением Conda), чтобы предотвратить конфликты с системными пакетами в каталоге /usr . В качестве альтернативы можно устанавливать пакеты командой pip install —user , которая устанавливает пакеты для пользователя, а не в системный каталог /usr .
Смотрите Python Packaging User Guide на предмет лучших практик по управлению пакетами.
Исторически использовалась команда easy_install (часть python-setuptools ) для установки пакетов, распространяемых как Eggs. easy_install и Eggs были заменены на pip и Wheels. Подробнее см. pip vs easy_install и Wheel vs Egg.
Примечание: Существуют также инструменты для интеграции pip и pacman путём автоматической генерации файлов PKGBUILD для выбранных пакетов PyPI: смотрите Creating packages#PKGBUILD generators.
Совет: pipenv предоставляет отдельный интерфейс командной строки для Pipfile, pip и virtualenv. Он доступен в пакете python-pipenv .
Привязки к графическим библиотекам
- Tkinter — Стандартный интерфейс Python к набору графических инструментов Tk.
- Qt for Python (PySide2) — Официальные привязки Python к Qt5.
- Qt for Python (PySide6) — Официальные привязки Python к Qt6.
- pyQt — Набор привязок Python к Qt.
- PyGObject — Привязки Python для библиотек на основе GObject вроде GTK, GStreamer, WebKitGTK, GLib и GIO.
- wxPython — Кроссплатформенный набор GUI-инструметов для Python, который выступает в роли обёртки для wxWidgets.
Для использования этих привязок в Python, скорее всего, потребуется доустановить соответствующие наборы библиотек (например, для использования Tkinter нужно установить tk ).
Советы и рекомендации
Виртуальное окружение
Python предоставляет инструменты для создания изолированных виртуальных окружений, в которых можно устанавливать пакеты, не влияя ни на другие виртуальные окружения, ни на системные пакеты Python. Виртуальное окружение позволяет запускать приложения в различных версиях Python на одной и той же системе.
Автодополнение в оболочке Python
Автодополнение по клавише Tab включено в интерактивной оболочке по умолчанию. Учтите, что дополнение readline работает только для строк в глобальном пространстве имён. Пакет python-jedi расширяет возможности автодополнения [1].
Решение проблем
Module not found после перехода на новую версию Python
После обновления пакета python до новой минорной версии (например, с 3.10 на 3.11) некоторые Python-приложения могут начать выдавать ошибку No module named имя_модуля .
Это происходит, когда зависимость недоступна или не установлена для текущей версии Python. Пакеты Python устанавливаются в каталог site-packages конкретной версии (общесистемный /usr/lib/pythonX.Y/site-packages/ или пользовательский ~/.local/lib/pythonX.Y/site-packages/ , где X.Y — версия, например 3.11). Поэтому каждый раз при переходе на новую минорную версию Python-пакеты, собранные для предыдущей версии Python, должны быть пересобраны для новой версии.
Пакеты из официальных репозиториев обновляются одновременно с Python, однако пакеты из сторонних источников, например из AUR, пользователь должен обновить самостоятельно. Смотрите Пользовательский репозиторий Arch#Обновление пакетов и Часто задаваемые вопросы#Что если я запущу полное обновление и обновится только библиотека, но не приложение, которое от нее зависит?
Смотрите также
Официальные ресурсы
- Официальная документация (для автономного доступа можно установить её с помощью пакета python-docs )
- Официальное руководство
Сторонние ресурсы
- Automate the Boring Stuff with Python — книга Creative Commons
- Awesome Python — обновляемый список ресурсов о Python
- A Byte of Python — книга Creative Commons
- Cracking Codes With Python — бесплатная онлайн-книга
- Crash into Python — бесплатное руководство
- Debugging in Python [устаревшая ссылка 2023-05-06 ⓘ] — руководство по использованию pdb , отладчика Python
- Dive Into Python — книга Creative Commons
- Fluent Python — коммерческая книга
- Introducing Python — коммерческая книга
- Invent Your Own Computer Games with Python — бесплатная онлайн-книга
- Learn Python — бесплатное интерактивное руководство
- Learn Python the Hard Way — коммерческая книга
- Pythonspot Python Tutorials — бесплатные онлайн-руководства
- Think Python — книга Creative Commons
Retrieved from «https://wiki.archlinux.org/index.php?title=Python_(Русский)&oldid=784419»
Управление несколькими версиями Python под управлением Ubuntu 20.04
Одно из моих первых разочарований при разработке на Python не имело ничего общего с самим Python, а скорее с излишне изотерическими действиями по развертыванию приложений на Python. Учебные курсы и руководства отлично справляются с задачей обучения студентов запуску Python кода локально, но действительно стоящие приложения не запускают на локальных машинах: они работают на интернет серверах потому что именно в этом и есть их назначение, не так ли? Хотя может быть я высказал сумасшедшую идею.
Ubuntu 20.04 это первая LTS версия Ubuntu в которой отсутствует Python2 и которая поставляется из коробки с установленной версией Python 3.8.5. Но что если написанное вами приложение использующее более новую версию Python? Если вы, как и я, пытались заменить установленную по умолчанию в системе версию, то в процессе сломали вашу ОС. Если до этого вам никто не говорил не делать этого, тогда я возьму на себя эту честь: не делайте этого.
Итак, что же нам делать? Существует нескольок путей как обновить версию Python на Ubuntu, но использование вастроенного в Ubuntu’s механизма «alternative install» оптимально по нескольким причинам:
- Мы хотим оставить нетронутойси стемную версию Python
- По возможности не возиться с Python PATH
- Мы можем удобно переключать активную версию Python с использованием CLI
Мы пройдемся по способу легкой и безопасной установки последней версии Python не затрагивая системную версию Python.
Скачивание последней версии Python
Первый шаг должен быть вам знаком: нам необходимо обновить зеркала Ubuntu и установленные пакеты, что бы быть уверенными что мы загружаем последние версии пакетов при установке чего-либо:
Обязательные обновления: $ sudo apt update && sudo apt upgrade -y
Установка другой версии Python на Ubuntu трубует установки целого ряда зависимых библиотек для Python. Я честно гвооря не уверен что делает половина из этого, и скорее всего это никому из нас никогда не понадобится. Но поверьте, это необходимый шаг:
Установка зависимостей Python: $ sudo apt-get install build-essential checkinstall $ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev \ libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev
Именно здесь многие могут начать установку Python с помощью Ubuntu package manager командой apt-get install python3.X. Мы скачаем и соберем последнюю версию Python из исходные кодов по нескольким причинам. Если версия Python достаточно свежая, некоторые машины под управлением Ubuntu могут не иметь обновленных зеркал что бы получить последнюю версию, но важнее всего то, что этот способ позволяет упростить управление несколькими версиями Python на Ubuntu.
Последнюю версию Python всегда можно найти на официальной странице с релизами на Python.org:
Первая ссылка на указанной странице должна называться Latest Python 3 Release — Python 3.X. Перейдя по ней необходимо прокрутить вниз страницы до секции «Files» и скопировать URL ссылки Gzipped source tarball.
На вашей Ubuntu машине необходимо теперь скачать эти исходные коды с помощью утилиты «wget». Ниже пример команд для скачивания заархивированной версии Python 3.9.2 в папку /opt и распаковка ее:
Скачивание Python: $ cd /opt $ sudo wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz $ sudo tar xzf Python-3.9.2.tgz
Теперь последняя версия Python скачана. После этого нам остается ее установить… правильно.
Установка альтернативной версии Python из исходных кодов
Главное разочарование установки Python с использованием команды apt-get install python3.X это что Python будет установлен нормально, но Ubuntu будет по прежнему использовать установленную в системе по умолчанию версию Python. К счастью для нас Ubuntu позволяет устанавливать нам дополнительные (альтернативные) версии Python с использованием команды make altinstall :
Установка из исходных кодов: $ cd Python-3.9.2 $ sudo ./configure —enable-optimizations $ sudo make altinstall
Исполнение этих команд может занять некоторое время. После того, как команды будут выполнены вы можете увидеть python3.9 в вашей директории /usr/local/bin/ :
Проверка версии Python $ cd /usr/local/bin/ $ ls
Итак, теперь у нас есть две установленные версии Python: установленная в системе по-умолчанию Python 3.8.5 и добавленная нами новая версия Python 3.9.2. Мы хотим оставить нетронутой установленную в системе версию по-умолчанию, но мы так же хотим запускать написанные нами приложения в версии Python 3.9… итак как мы можем этим управлять?
Linux предусматривает такой сценарий с помощью команды update-alternatives . Мы можем сказать Ubuntu что у нас есть ветка с альтернативной версией на нашей машине, это предоставит нам возможность легко переключаться между ними. Вот как это работает:
Включение альтернативной версии Python $ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 $ update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.9 2
Мы запускаем update-alternatives дважды: один раз для Python 3.8, и один раз для Python 3.9. Теперь мы можем использовать команду update-alternatives —list что бы посмотреть все альтернативные версии какого-либо установленного ПО:
Список установленных версий Python $ update-alternatives --list python3 /usr/bin/python3.6 /usr/local/bin/python3.8
Теперь мы можем переключаться между установленными версиями Python! Запустите следующую команду:
Переключение между версиями $ update-alternatives --config python3
После выполнения команды вы должны получить подсказку как в приведенном ниже примере. Это будет список всех доступных версий Python в вашей системе. Выберите версию которую хотите использовать введя соответствующий номер версии указанный в колонке Selection :
CLI для переключения активной версии Python Selection Path Priority Status ------------------------------------------------------------ 0 /usr/bin/python3.8 3 auto mode * 1 /usr/bin/python3.8 3 manual mode 2 /usr/local/bin/python3.10 2 manual mode Press to keep the current choice[*], or type selection number:
И вы это сделали! Для переключения версии Python все что нужно — это ввести запрошенный номер версии Python указанный в колонке selection .
Это прозвучит абсурдно, но изменить версию Python в Ubuntu ничего не сломав — это впечатляет. Я бы сказал что это в основном вина тех, кто преподаает Python. Если «учат те, кто не может сделать», то было бы логично предположить что Python преподают те, кто не запустил ни одного значимого проекта. Это было жестко, но не бейте меня нисмотря ни на что.
Мы закончили самую трудную часть, но осталось еще немного рутинной работы. Нам все еще нужно установить pip для нашей свежеустановленной версии Python, а так же обновить pip до последней версии.
Установка pip3 $ apt install python3-pip $ python3.9 -m pip install --upgrade pip
Вы наверняка заметили что Ubuntu 20.04 (и новее) заставляют нас явно указывать python3 при использовании Python несмотря на отсутствие Python 2 на машине. Это немного раздражает, но так же потенциально может сломать библиотеки которые пытаются использовать Python (NPM, sqlite и node-qyp например)
Возможно вы чувствуетет в себе достаточно сил что бы создать alias, который будет при обращении к python ссылаться на python3, но к сожалению это не будет работать так, как вам бы хотелось. Хорошая новость в том, что есть простое решение:
Скажите Ubuntu что python это python3 $ apt-get install python-is-python3
Да, есть целый пакет для Ubuntu созданный специально для решения этой задачи. Но это работает ¯_(ツ)_/¯.
- Python
- multiple version
- несколько версий
Что делать, если нужный вам модуль поддерживает только Python 2: пошаговое руководство
Оказалось, что один из модулей, необходимых вам в работе, не поддерживает Python 3. Предлагаем способ решения этой проблемы.
Рассказывает Энтони Шоу
На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.
Перед вами небольшая инструкция по решению довольно распространенной проблемы: при работе над проектом оказывается, что один из необходимых вам модулей не поддерживает Python 3. Для примера взята клиентская библиотека для Qualys (средство обеспечения безопасности). Вот что вам следует сделать:
0. Удостовериться, что этот вопрос еще не решен
Прежде чем начать, проверьте, не сталкивался ли кто-то ранее с такой же проблемой, исследуйте GitHub. Посмотрите — может быть, на PyPi найдется подходящий пакет, в котором содержатся обновления для Python 3.
1. Сделать форк
Если поиски все же ни к чему не привели, приступайте к изменению выбранного модуля. Стоит заметить, что обычно на PyPi указываются поддерживаемые версии Python. У модулей, работающих только с Python 2, данная информация часто бывает опущена. В рассматриваемом примере эта часть описания модуля выглядит следующим образом:
Итак, откройте основной проект на GitHub. Прежде чем вносить любые изменения, обязательно создайте его форк, затем скачайте или клонируйте репозиторий и создайте новую ветку. Говорящим названием для неё будет, например, «python3».
Если вам неясно, как проделать эти действия, читайте наше руководство по Git для новичков.
2. Исправить операторы print
Первое, с чем нужно разобраться до решения проблем с импортированием — это самые обычные операторы вывода. Старые операторы print без скобок — одно из самых распространенных препятствий, с которым можно столкнуться в контексте перехода от Python 2 к Python 3. В третьем шаге мы будем использовать пакет Python-Modernize, облегчающий этот переход, но его работа не затронет README, документацию и некоторые другие файлы. Чтобы найти абсолютно все старые операторы print в пределах модуля, воспользуйтесь рекурсивным поиском по вложенным директориям:
fgrep -r "print " .
Вы увидите, что некоторые из выведенных на экран соответствий находятся в директории git , игнорируйте их. Все остальные найденные операторы print замените на функции print() в любом текстовом редакторе, а после создайте из исправлений единый коммит командой:
git commit -a -m "print to python 3"
3. Провести тесты
«Лучший» способ проверить совместимость Python 2 и 3 — через полное тестирование и CI сервисы вроде Circle, Snap или Travis. Но вот незадача — для модернизируемого вами модуля никаких тестов нет. И у вас остается два варианта:
- написать тесты самому;
- провести статический анализ кода.
Если вы сомневаетесь, что второй вариант может вам чем-то помочь, прочитайте нашу статью о статическом анализаторе.
Статический анализ. Установите Python-Modernize:
pip install modernize
Сначала запустите его в режиме info:
python-modernize qualysapi
Это позволит получить общее представление о том, какие изменения будут внесены. Все устраивает? Тогда запускайте процесс изменений следующей командой:
python-modernize -wn qualysapi
Затем сделайте из них отдельный коммит.
Добавление тестов. Первая проверка: можно ли импортировать модуль, пакет, подмодуль? Этот тест вскрывает много проблем в Python 3, связанных с пространствами имен. Используйте Tox для проведения тестирования в различном окружении.
Вторая проверка: есть ли в проекте обработка строк. На тему строк в Python 3 информации гораздо больше, чем можно уместить в этом посте, но вы можете обратиться к проекту six, в котором рассматривается проблема определения, является ли объект строкой, а также использование юникода и методов байтовой конвертации.
Третья проверка подразумевает наличие некоторого опыта в работе с модулем. Вы не сможете сразу заняться юнит-тестированием на основе существующей кодовой базы, если не будете понимать, насколько корректно она работает на данный момент. Двигайтесь в обратном направлении — сфокусируйтесь на интеграционном тестировании, а от него перейдите к юнит-тестам. Попробуйте для начала написать простой скрипт, который использует модуль по его прямому назначению, а затем дополняйте его другими сценариями использования. Если вы уже настроились пропустить данную проверку, почитайте наш материал о пользе юнит-тестирования.
4. Обновить setup.py
Откройте setup.py и посмотрите, какие изменения в него нужно внести, чтобы уверенно заявлять, что рассматриваемый нами модуль теперь поддерживает Python 3:
setup(name=__pkgname__, version=__version__, author='Parag Baxi', author_email='parag.baxi@gmail.com', description='QualysGuard(R) Qualys API Package', license ='BSD-new', keywords ='Qualys QualysGuard API helper network security', url='https://github.com/paragbaxi/qualysapi', package_dir=, packages=['qualysapi',], # package_data=, # scripts=['src/scripts/qhostinfo.py', 'src/scripts/qscanhist.py', 'src/scripts/qreports.py'], long_description=read('README.md'), classifiers=[ 'Development Status :: 5 - Production/Stable', 'Topic :: Utilities', 'License :: OSI Approved :: Apache Software License', 'Intended Audience :: Developers', ], install_requires=[ 'requests', ], )
На что точно стоит обратить внимание:
- В коде выше обнаружилось как указание лицензии BSD, так и лицензии Apache 2. При этом в кодовых файлах говорится Apache 2, а в директории вообще нет файла LICENSE. Такая ситуация могла возникнуть из-за ошибки, связанной с копипастом, поэтому в данном случае её логично исправить в setup.py, а потом добавить соответствующий файл LICENSE.
- Разметка в PyPi не отображается. Можно с этим смириться, можно добавить RST файл. Главное, помните о том, что это все же не ваш проект.
- Не написано, какую версию Python поддерживает модуль. Добавьте эту информацию в setup.py.
- Использование Python-Modernize означает, что данный модуль зависим от пакета six. Отметьте это в поле install_requires . А заодно проверьте, что все указанные там пакеты, от которых зависит изменяемый модуль, тоже поддерживают Python 3.
Посмотрим, что получилось:
setup(name=__pkgname__, version=__version__, author='Parag Baxi', author_email='parag.baxi@gmail.com', description='QualysGuard(R) Qualys API Package', license="Apache License (2.0)", keywords ='Qualys QualysGuard API helper network security', url='https://github.com/paragbaxi/qualysapi', package_dir=, packages=['qualysapi',], # package_data=, # scripts=['src/scripts/qhostinfo.py', 'src/scripts/qscanhist.py', 'src/scripts/qreports.py'], long_description=read('README.md'), classifiers=[ 'Development Status :: 5 - Production/Stable', 'Topic :: Utilities', 'License :: OSI Approved :: Apache Software License', 'Intended Audience :: Developers', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 3' ], install_requires=[ 'requests', 'six' ], )
5. Загрузить в основной проект
Вернемся к началу. При работе над вашим проектом вы столкнулись с тем, что один из модулей не поддерживает Python 3. Вы избавились от проблем совместимости, теперь нужно указать обновленную версию модуля в файле requirements.txt . Убедитесь в том, что вы сначала запушили изменения на GitHub. Это делается командой:
git push origin python3
Pip позволяет вам устанавливать необходимое не только из PyPi, но и прямо из репозитория Git. Вы можете указать конкретную ветку, используя символ @. Параметр egg= используется, чтобы передать Pip имя пакета.
pip -e git+https://github.com/tonybaloney/qualysapi@python3#egg=qualysapi
На этом этапе можно продолжить запуск интеграционных тестов для новой версии.
6. Отправить пулл реквест
Теперь нужно поделиться своей работой с автором и сообществом Python на GitHub. Придерживайтесь следующих правил общения:
- Будьте вежливы.
- Поясните, что хотели бы использовать этот модуль с Python 3.
- Поблагодарите автора за его работу по созданию модуля.
- Прокомментируйте, что сделали.
Вот такой пулл реквест получился по итогам рассмотренного примера. Подождите, пока ваши изменения зальют в проект, после чего ожидайте, когда на PyPi появится обновление. (Вернее, надейтесь, что оно там появится.)
7. Наконец, три месяца спустя…
…автор пакета не залил ваш код. Такое случается. Обычно это происходит, когда человек поддерживал проект, пока использовал его в рамках своей рабочей деятельности, а потом сменил место работы. Вернитесь к setup.py и задайте модулю новое имя (не изменяя поле packages ), по типу «qualysapi-py3». Сделайте пуш в PyPi, а потом обновите сообщение в вашем пулл реквесте, указав это новое имя. Теперь, когда кто-то еще будет искать помощь по Python 3 для использования данного модуля, он увидит ваш пост.
Perl. Как узнать версию модуля ?
Здесь Mojo — название модуля, версию, которого мы хотим узнать, его с успехом можно заменить на CGI или что-то еще.
Читайте еще:
- Доступ к настройкам модуля в Yii
- Интерполяция переменной в Perl
- Perl и Mojo начало.
- Не PHP единым сыт человек, или как я побывал на YAPC::RUSSIA 2009
- Perl. Восстановление переменной в цикле
Запись опубликована 9 сентября 2010 автором xoma в рубрике Разработка с метками Perl, модули.
Ссылки

- Канал о базах данных
- Крутая команда разработчиков
- Открыть счет для бизнеса
- Сервис для Delivery Marketing
- Хороший хостинг
- Читать в тг
Свежие записи
- Спасибо за скидку =)
- Acceptance, functional, unit. В таком порядке.
- Программирование во время холодной войны
- Про saas и выжималку
- SymfonyInsight и конец OpenSource
- TimeWeb и yupe
- Тренажер по Python
- Свойство только пишется, но не читается.
- Эффект колибри
- Почему шаред-хостинг все еще жив
