Где я могу поместить свои самописные пакеты Python?

Есть ли каноническое место, куда положить самописные пакеты? Мой собственный поиск привел только к сообщению в блоге о , куда помещать независимые от версии чистые пакеты Python и ТАК вопрос о каноническом расположении под Linux, пока я работаю в Windows.

В моем случае я хотел бы иметь возможность импортировать свои собственные пакеты во время сеанса IPython, как и любой пакет сайта, независимо от того, в каком рабочем каталоге я начал сеанс. В Matlab, например, соответствующая папка просто C:/Users/ojdo/Documents/MATLAB.

import mypackage as mp
mp.awesomefunction()
...

Ответ 1

Благодаря двум дополнительным ссылкам, я нашел не только предполагаемый ответ на свой вопрос, но и решение, которое мне нравится еще больше, и которое - как ни странно - было также объяснено в моем первом результате поиска, но запутано всеми version- (не) зависимыми языками пакетов-сайтов.

Ответ на оригинальный вопрос: папка по умолчанию

Я хотел знать, было ли каноническое (как в "по умолчанию") местоположение для моих самописных пакетов. И это существует:

>>> import site
>>> site.USER_SITE
'C:\\Users\\ojdo\\AppData\\Roaming\\Python\\Python27\\site-packages'

А для примера с Linux и Python 3:

[email protected]:~$ python3
>>> import site
>>> site.USER_SITE
'/home/ojdo/.local/lib/python3.6/site-packages'

В документации по установке пакета пользовательской схемы указано, что папка USER_SITE - если она существует - будет автоматически добавлена в ваш Python sys.path при запуске интерпретатора, никаких ручных действий не требуется.


Бонус: пользовательский каталог для собственных пакетов

  1. Создайте каталог где угодно, например C:\Users\ojdo\Documents\Python\Libs.
  2. Добавьте файл sitecustomize.py в папку site-packages установки Python, т.е. в C:\Python27\Lib\site-packages (для всех пользователей) или site.USER_SITE (для одного пользователя).
  3. Затем этот файл заполняется следующим кодом:

    import site
    site.addsitedir(r'C:\Users\ojdo\Documents\Python\Libs')
    
  4. Вуаля, новый каталог теперь автоматически добавляется в sys.path при каждом (I) сеансе Python.

Как это работает: Пакет site, который автоматически импортируется при каждом запуске Python, также пытается импортировать пакет sitecustomize для пользовательских изменений пути пакета. В этом случае этот фиктивный пакет состоит из сценария, который добавляет папку личного пакета в путь Python.

Ответ 2

Поместите источник своего пакета, где бы вы ни хотели, но, по крайней мере, предоставите вашему пакету минимальный setup.py файл, непосредственно за пределами пакета:

import setuptools

setuptools.setup(name='mypackage')

Затем подделайте свой пакет в свою установку python site-packages, выполнив:

python setup.py develop

Это очень похоже на запуск python setup.py install, за исключением того, что egg просто указывает на исходное дерево, поэтому вам не нужно install после изменения каждого исходного кода.

Наконец, вы должны иметь возможность импортировать свой пакет:

python -c "import mypackage as mp; print mp.awesomefunction()"

Ответ 4

У меня был тот же вопрос, и ваш ответ очень полезен. Чтобы добавить немного, я наткнулся на этот пример, который мне полезен:

http://python-packaging.readthedocs.io/en/latest/minimal.html

Это минимальный пример того, как упаковать свой собственный код и правильно установить его локально (я думаю, это то, что вы на самом деле хотите), или распространять на PyPI. Выполнение вещей на пути python.