2013-09-15 2 views
14

Могу ли я «внедрить» библиотеку Python в свой собственный пакет Python?Внедрение библиотеки Python в моем собственном пакете

Возьмите, например, Requests library. Как я могу интегрировать его в свой собственный пакет, целью которого является позволить мне запускать мое приложение на разных компьютерах без фактической установки запросов на всех, но иметь его в той же папке, что и мой пакет?

Возможно ли это?

Извините, если вопрос звучит глупо, но я совершенно новый для Python ...
Спасибо!

+1

Вы хотите, чтобы ваше приложение устанавливалось с помощью '' pip''/'' easy_install'' или полностью автономно? – fjarri

+0

@Bogdan, это не обязательно для его установки - я обычно буду запускать его сам (так что я могу просто скопировать папку), но не на всех машинах у меня будет разрешение на установку дополнительных модулей. –

+0

@Sean: Конечно, да. Вы всегда можете устанавливать пакеты в своем домашнем каталоге с помощью 'pip'. Я думаю, вы не должны пытаться внедрять сторонние пакеты, потому что это затрудняет управление зависимостями. –

ответ

18

Если это чистая библиотека python (не скомпилированные модули), вы можете просто поместить библиотеку в папку в своем проекте и добавить эту папку в свой путь поиска по модулю. Вот пример проекта:

 
|- application.py 
|- lib 
| `- ... 
|- docs 
| `- ... 
`- vendor 
    |- requests 
    | |- __init__.py 
    | `- ... 
    `- other libraries... 

vendor папка в этом примере содержит все модули сторонних. Файл application.py будет содержать следующее:

import os 
import sys 

# Add vendor directory to module search path 
parent_dir = os.path.abspath(os.path.dirname(__file__)) 
vendor_dir = os.path.join(parent_dir, 'vendor') 

sys.path.append(vendor_dir) 

# Now you can import any library located in the "vendor" folder! 
import requests 
+0

Мне пришлось добавить «sys.path.append (vendor_dir)» (и импортировать sys) для этого, чтобы это сработало - оставив это вместо комментария редактирования, потому что 3 целых дня опыта питона :) – jasondoucette

+0

@jasondoucette: Действительно, мой ответ, похоже, был брошен. Я объявляю пути, но не добавляю их в 'sys.path'. Будет редактировать – Hubro

4

Если вам нужно только запустить приложение может быть pyinstaller упаковка является лучшим вариантом.

Это создаст единый пакет со всем, что необходимо, в том числе Python, чтобы избежать зависимостей от системы вы работаете в.

+0

Спасибо за ответ! Я рассмотрю это, хотя, возможно, это верх над областью, для которой это нужно :) –

2

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

from setuptools import setup, find_packages 

setup(
    name = 'MyPackage', 
    version = '1.0', 
    packages = find_packages(), 
    ... 
    install_requires = ['requests'], 
    ... 
) 

это будет устанавливаться пользователем

python setup.py install 

запросы будут автоматически установлены слишком.

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