Я делал скрипты Python для простых задач на работе и никогда не задумывался о том, чтобы их упаковывать для других. Теперь мне поручено сделать оболочку Python для REST API. Я абсолютно не знаю, с чего начать, и мне нужна помощь.
Что я имею:
(Просто хочу быть как можно более конкретным) У меня есть готовый virtualenv , он также есть в github , также есть файл .gitignore для python, плюс библиотека запросов для взаимодействия с REST API. Вот и все.
Вот текущее дерево каталогов
.
├── bin
│ └── /the usual stuff/
├── include
│ └── /the usual stuff/
├── lib
│ └── python2.7
│ └── /the usual stuff/
├── local
│ └── /the usual stuff/
└── README.md
27 directories, 280 files
Я даже не знаю, где поместить файлы .py, если я когда-либо сделаю один.
Что я хотел сделать:
Сделайте модуль Python доступным для установки с помощью "pip install ..."
Если возможно, я хочу пошаговый общий процесс написания модулей Python.
python
python-2.7
python-module
yowmamasita
источник
источник
Ответы:
Модуль - это файл, содержащий определения и операторы Python. Имя файла - это имя модуля с суффиксом
.py
создать, а
hello.py
затем написать следующую функцию в качестве его содержимого:Затем вы можете импортировать
hello
:Чтобы сгруппировать много
.py
файлов, поместите их в папку. Любая папка с__init__.py
модулем Python считается модулем, и вы можете назвать их пакетом.Вы можете использовать оператор импорта в вашем модуле обычным способом.
Для получения дополнительной информации см. 6.4. Пакеты .
источник
Python 3 - ОБНОВЛЕНО 18 ноября 2015
Считал принятый ответ полезным, но хотел бы остановиться на нескольких моментах в интересах других, основываясь на своем собственном опыте.
Модуль: Модуль - это файл, содержащий определения и операторы Python. Имя файла - это имя модуля с добавленным суффиксом .py.
Пример модуля : Предположим, у нас есть один скрипт Python в текущем каталоге, здесь я называю его mymodule.py
Файл mymodule.py содержит следующий код:
Если мы запустим интерпретатор python3 из текущего каталога, мы сможем импортировать и запустить функцию myfunc следующими различными способами (обычно вы просто выбираете один из следующих):
Итак, это было достаточно просто.
Теперь предположим, что вам нужно поместить этот модуль в его собственную выделенную папку, чтобы предоставить пространство имен модуля, вместо того, чтобы просто запускать его ad-hoc из текущего рабочего каталога. Здесь стоит объяснить концепцию упаковки .
Пакет : Пакеты - это способ структурировать пространство имен модулей Python с помощью «точечных имен модулей». Например, имя модуля AB обозначает подмодуль с именем B в пакете с именем A. Так же, как использование модулей избавляет авторов различных модулей от необходимости беспокоиться о именах глобальных переменных друг друга, использование названий модулей с точками сохраняет авторов мультимодульных пакетов, таких как NumPy или Python Imaging Library от необходимости беспокоиться об именах модулей друг друга.
Пример пакета : теперь давайте предположим, что у нас есть следующая папка и файлы. Здесь mymodule.py идентичен ранее, а __init__.py - пустой файл:
Файлы __init__.py необходимы, чтобы Python рассматривал каталоги как пакеты. Для получения дополнительной информации см. Ссылку на документацию по модулям, предоставленную позже.
Наш текущий рабочий каталог находится на один уровень выше обычной папки mypackage
Если мы сейчас запустим интерпретатор python3, мы сможем импортировать и запустить модуль mymodule.py, содержащий требуемую функцию myfunc, следующими способами (обычно вы просто выбираете один из следующих):
Предполагая Python 3, есть отличная документация по адресу: Модули
С точки зрения соглашений о присвоении имен для пакетов и модулей, общие рекомендации приведены в PEP-0008 - см. Имена пакетов и модулей.
Модули должны иметь короткие, строчные имена. Подчеркивания могут использоваться в имени модуля, если это улучшает читабельность. Пакеты Python также должны иметь короткие, строчные имена, хотя использование подчеркивания не рекомендуется.
источник
import mypackage
. В случае, если вы хотите импортировать только функцию из модуля (даже файла), лучше использоватьfrom module import function
. В случае подпапки,from subfolder.module import function
так что вы можете просто вызвать безfunction()
запуска других частей кода. Кроме того, не используйте,from module import *
если вам действительно не нужно.import mypackage
? Добавлениеimport mymodule
к__init__.py
не работает ..Поскольку никто еще не освещал этот вопрос ОП:
Вот абсолютный минимальный пример, показывающий основные этапы подготовки и загрузки вашего пакета в PyPI с использованием
setuptools
иtwine
.Это ни в коем случае не заменит чтение по крайней мере учебника , это гораздо больше, чем описано в этом очень простом примере.
Сам процесс создания пакета уже описан в других ответах, поэтому давайте предположим, что этот шаг уже пройден, а структура нашего проекта выглядит следующим образом:
Для того, чтобы использовать
setuptools
для упаковки, нам нужно добавить файлsetup.py
, который идет в корневую папку нашего проекта:Как минимум, мы указываем метаданные для нашего пакета, наш
setup.py
будет выглядеть так:Поскольку мы установили
license='MIT'
, мы включаем копию в наш проект какLICENCE.txt
, наряду с файлом readme в reStructuredText, какREADME.rst
:На этом этапе мы готовы приступить к использованию упаковки
setuptools
, если у нас ее еще нет, мы можем установить ее с помощьюpip
:Чтобы сделать это и создать
source distribution
, в корневой папке нашего проекта мы вызываем нашуsetup.py
из командной строки, указывая, что мы хотимsdist
:Это создаст наш дистрибутивный пакет и egg-info, и в результате мы получим структуру папок, подобную этой, с нашим пакетом в
dist
:На данный момент у нас есть пакет, который мы можем установить с помощью
pip
нашего корневого каталога проекта (при условии, что у вас есть все имена, как в этом примере):Если все пойдет хорошо, теперь мы можем открыть интерпретатор Python, я бы сказал, что где-то за пределами каталога нашего проекта, чтобы избежать путаницы, и попытаться использовать наш новый блестящий пакет:
Теперь, когда мы подтвердили, что пакет установлен и работает, мы можем загрузить его в PyPI.
Так как мы не хотим загрязнять живой репозиторий нашими экспериментами, мы создаем учетную запись для тестового репозитория и устанавливаем
twine
для процесса загрузки:Теперь мы почти на месте, с созданной учетной записью мы просто
twine
просим загрузить наш пакет, он запросит наши учетные данные и загрузит наш пакет в указанный репозиторий:Теперь мы можем войти в нашу учетную запись в тестовом репозитории PyPI и на некоторое время поразиться нашему недавно загруженному пакету, а затем взять его, используя
pip
:Как видим, основной процесс не очень сложен. Как я уже говорил ранее, в этом есть гораздо больше, чем здесь, так что читайте учебник для более подробного объяснения.
источник
setuptools
?twine
, но вы можете проверить свой пакет локально перед публикацией после того, как создали его с помощьюsetuptools
.После того, как вы определили выбранные вами команды, вы можете просто перетащить сохраненный файл в папку Lib в ваших программных файлах python.
источник
Сделайте файл с именем "hello.py"
Если вы используете Python 2.x
Если вы используете Python 3.x
Запустите файл. Затем вы можете попробовать следующее:
Если вы хотите немного сложнее, вы можете использовать следующее:
Если вы используете Python 2.x
Если вы используете Python 3.x
Смотрите тот, что в скобках рядом с определением? Это важно. Это тот, который вы можете использовать в пределах определения.
Текст - вы можете использовать его, когда хотите, чтобы программа говорила, что вы хотите. По названию это текст. Я надеюсь, что вы знаете, что означает текст. Это означает «слова» или «предложения».
Запустите файл. Затем вы можете попробовать следующее, если вы используете Python 3.x:
Для Python 2.x - я думаю, то же самое с Python 3? Без понятия. Поправьте меня, если я допустил ошибку в Python 2.x (я знаю Python 2, но использую Python 3)
источник
Я создал проект, чтобы легко инициировать скелет проекта с нуля . https://github.com/MacHu-GWU/pygitrepo-project .
И вы можете создать тестовый проект, скажем , давайте,
learn_creating_py_package
.Вы можете узнать, какой компонент вы должны иметь для различных целей, таких как :
Преимущество использования в
pygitrepo
том , что эти утомительно автоматически создаются себя и адаптировать вашиpackage_name
,project_name
,github_account
,document host service
,windows or macos or linux
.Это хорошее место, чтобы научиться разрабатывать проект на Python, как профессионал.
Надеюсь, это поможет.
Спасибо.
источник