2013-07-23 5 views
7

Есть ли каноническое место, где можно поставить самозанятые пакеты? Мой собственный поиск дал только сообщение в блоге о where to put version-independent pure Python packages и SO question for the canonical location under Linux, в то время как я работаю над Windows.Где я могу поместить свои самописные пакеты Python?

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

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

Я предпочитаю вставлять файлы в 'C: \ PythonXX \ Lib \ site-packages'. Это имеет то преимущество, что не требует дополнительной настройки - этот каталог по умолчанию находится в 'sys.path'. – bbayles

+4

Вы посмотрели [документацию] (http://docs.python.org/2/install/#how-installation-works)? Кроме того, вы можете использовать переменную среды PYTHONPATH, как описано [в другом разделе документов] (http://docs.python.org/2/install/#modifying-python-s-search-path). –

ответ

6

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

Ответ на первоначальный вопрос

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

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

Документы на user scheme package installation состоянии, что эта папка - если она существует - будет автоматически добавлена ​​в sys.path.

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

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

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

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

+0

Сделай это, когда это возможно. Я получаю * «Вы можете принять свой собственный ответ завтра» * прямо сейчас. – ojdo

+0

Примечание - документы python имеют ошибку - они имеют неправильный формат. Он говорит, что пакеты должны быть в «modules: userbase/lib/pythonX.Y/site-packages», но каталог (для 3.5) с сайта.USER_SITE - это ~ ~/Library/Python/3.5/lib/python/site-packages '- Заметьте, что XY там нет. Мой сайт.USER_BASE равен '~/Library/Python/3.5' –

3

Я хотел бы использовать схему домашней для этого:

http://docs.python.org/2/install/#alternate-installation-the-home-scheme

+0

Спасибо за указатель на документацию. Это заставило меня прочитать его более подробно и найти свойство 'site.USER_BASE'. Интересно, почему это не упоминается более «заметно». – ojdo

7

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

import setuptools 

setuptools.setup(name='mypackage') 

Затем поддельных установить пакет в ваш питон установить года site-packages выполнив команду:

python setup.py develop 

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

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

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

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

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

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

+0

Поддерживается как для контента, так и для 'joke'. Тогда ... 'pip search funniest' – ojdo

Смежные вопросы