Создать модуль python можно на основе одного единственного скрипта. Модуль можно будет разместить на PyPI, откуда его смогут скачивать и использовать другие разработчики.
Создать модуль python
Основу тестового модуля будет представлять один скрипт. Он принимает первый аргумент командной строки и удваивая выводит в консоль.
mcedit dubler.py
#!/usr/bin/python3 import sys argument = sys.argv[1] argument = str(argument) print (2 * argument)
Пример использования получившегося модуля
Сначала указывается интепретатор, затем имя скрипта и аргумент — любая последовательность, отделенная пробелом.
python3 /tmp/dubler.py some
somesome
python3 /tmp/dubler.py «some «
some some
Создание дистрибутива для модуля
Модуль собирается из самих скриптов (в примере он один) и файла с метаданными. На выходе ожидаем получить модуль с более сложной структурой
Создаем каталог
mkdir dubler && cd dubler
В каталоге нужен написанный ранее скрипт
cp ../dubler.py .
Добавляем setup.py, который будет содержать метаданные
mcedit setup.py
from distutils.core import setup setup( name = 'dubler', version = '1.0.0', py_modules = ['dubler'], author = 'me', author_email = '[email protected]', url = 'http://example.com', description = 'simple app', )
Теперь можно собрать дистрибутив (он же модуль)
python3 setup.py sdist
writing manifest file 'MANIFEST'
creating dubler-1.0.0
making hard links in dubler-1.0.0…
hard linking func.py -> dubler-1.0.0
hard linking setup.py -> dubler-1.0.0
creating dist
Creating tar archive
removing 'dubler-1.0.0' (and everything under it)
Устанавливаем модуль для локальной копии python выполняя с реквизитами суперпользователя
python3 setup.py install
copying build/lib/dubler.py -> /usr/local/lib/python3.6/dist-packages
byte-compiling /usr/local/lib/python3.6/dist-packages/func.py to dubler.cpython-36.pyc
running install_egg_info
Writing /usr/local/lib/python3.6/dist-packages/dubler-1.0.0.egg-info
Содержимое каталога
ls
build dist func.py MANIFEST setup.py
В скриптах теперь можно использовать модуль dubler после того, как добавлен импорт: import dubler
Если в модуле существуют функции, импортировать их можно отдельно from dubler import somefunc
В скрипте это позволит вызывать функцию как somefunc вместо dubler.somefunc() . Но, такой импорт может перезаписать данные из текущего namespace. Т.е. определение функции с тем же именем до импорта.
Модули можно не устанавливать, а разместить там, где их ищет система
> import sys; sys.path
[», '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
Всегда есть возможность загрузить дистрибутив на PyPI дав к нему общий доступ. Предварительно нужно на данном ресурсе зарегистрироваться.
python3 setup.py register
python3 setup.py sdist upload
Для своих модулей со структурой хотя бы немного более сложной, чем приведенная следует использовать if __name__ == '__main__'.