Підсумок
Є три загальні категорії модулів, з якими ви маєте справу:
- Ті підтримуючі програми, встановлені для всіх користувачів із системою пакетів ОС. (Це може включати навіть інструменти та бібліотеки, які використовуються людьми, які програмують в Python; див. Нижче.) Для цього ви використовуєте пакети ОС, де можна, і
pip
встановлюєте в системні каталоги, де це необхідно.
- Ті програми підтримки, встановлені певним користувачем, лише для її власного використання, а також для певних аспектів її "щоденного" використання Python як мови сценаріїв. Для цього вона використовує
pip --user
, можливо, pyenv або pythonz , і подібні інструменти та тактику.
- Ті, хто підтримує розробку та використання конкретного додатку. Для цього ви використовуєте
virtualenv
(або подібний інструмент).
Кожен рівень тут також може отримувати підтримку з попереднього рівня. Наприклад, наш користувач в (2) може покладатися на інтерпретатор Python, встановлений через пакети ОС.
Розглянемо це трохи детальніше:
Системні програми та пакети
Програми, написані на Python, які ви хочете "просто запустити", прості: просто скористайтеся інструментами для встановлення ОС та дозвольте їм вносити все, що їм потрібно; це нічим не відрізняється від не-Python програми. Це, ймовірно, призведе до інструментів / бібліотек Python (наприклад, самого інтерпретатора Python!), На які користувачі вашого апарату можуть почати покладатися; це не проблема, якщо вони розуміють залежність і в ідеалі знають альтернативні способи впоратися з нею на хостах, які не забезпечують цих залежностей.
Поширений і простий приклад такої залежності - це деякі мої особисті сценарії, ~/.local/bin/
які починаються з цього #!/usr/bin/env python
. Вони працюватимуть добре (доки вони працюють під Python 2) на RH / CentOS 7 та більшості (але не всіх) установок Ubuntu; вони не будуть здійснюватися під базовою установкою Debian або в Windows. Наскільки мені не подобається моє особисте середовище, що значно перешкоджає залежності від пакетів ОС (я працюю над багатьма різними ОС), щось подібне я вважаю досить прийнятним; мій план резервного копіювання для рідкісних хостів, у яких немає системного Python і не може отримати його, - це користуватися системою користувача, як описано нижче.
Люди, які використовують системний інтерпретатор пітона, зазвичай також залежать від системи pip3
. Ось де я зазвичай малюю лінію на моїх системних залежностях; все virtualenv
вперед я маю справу з собою. (Наприклад, мій стандартний сценарій активації покладається на те , що знаходиться на шляху pip3
чи pip
є, але завантажує власну копію програми virtualenv
для завантаження віртуального середовища, яке вона створює.
Однак, мабуть, є обставини, коли цілком розумно зробити більше доступним для середовища розвитку. У вас можуть бути інтерфейси Python у складних пакетах (таких як СУБД), де ви хочете використовувати системну версію цієї версії, і вам здається, що найкраще також дозволити системі вибрати конкретний код бібліотеки Python, який ви будете використовувати для розмови з нею. Або ви, можливо, розгортаєте безліч хостів з базовим середовищем розробки для класу Python, і вам найпростіше автоматизувати стандартні системні пакети.
Програми та пакети "Щоденні" користувача
Користувачі можуть мати бібліотеки або програми Python, які не добре вписуються у віртуальне середовище, оскільки вони хочуть допомогти створити віртуальне середовище в першу чергу (наприклад, virtualenvwrapper ) або це речі, якими ви зазвичай користуєтеся з командного рядка навіть тоді, коли виконувати непітонські роботи. Навіть якщо у них є можливість встановити їх системні версії, вони можуть відчувати себе зручніше, встановлюючи власні (наприклад, тому, що хочуть використовувати останню версію інструменту та його залежності).
Як правило pip --user
, те, що люди будуть використовувати для цього, хоча певні залежності, такі як інтерпретатор Python, вимагають трохи більше, ніж це. pyenv та pythonz корисні для створення особистих перекладачів (будь то встановлений ~/.local/bin
для перекладача за замовчуванням чи іншим способом), і, звичайно, завжди можна створити "вручну" з джерела, якщо бібліотеки розробників доступні.
Я намагаюся зберегти мінімальний набір встановлених тут речей: virtualenvwrapper (оскільки я ним постійно користуюся) і, можливо, остання версія pip. Я намагаюся уникати залежностей поза стандартною бібліотекою або на Python 3 для особистих сценаріїв, які я пишу, щоб використовуватись у багатьох хостах. (Хоча ми побачимо, як довго я можу протриматися з цим, коли я переміщу все більше і більше цих особистих сценаріїв до Python.)
Окреме середовище розробки додатків та середовища виконання
Це звичайна віртуолв річ. Для розробки вам майже завжди слід використовувати virtualenv, щоб переконатися, що ви не використовуєте системні залежності, або часто більше одного для тестування на різні версії Python.
Ці віртуальні середовища також хороші для додатків з великою кількістю залежностей, де ви хочете уникнути забруднення вашого користувальницького середовища. Наприклад, я зазвичай встановлюю virtualenv для запуску ноутбуків Юпітера тощо.