Если в библиотеке есть C-расширения, определенно нет способа сделать это.
Если нет, то технически возможно, но практически нет.
Что вы почти наверняка хотите сделать, это использовать virtualenv
или, если вы не можете этого сделать, пакеты сайтов-пользователей вместо системных сайтов-пакетов или какой-либо другой способ обойти «может», t install "и просто установите его.
Но если вы заинтересованы в технических бит ...
Если были ткань, скажем, один .py
файла, который будет легко. Но, глядя на the source, у него много файлов. И они организованы в иерархию, а не только в плоский каталог. И есть нетривиальный setup.py
, который обычно означает, что он заканчивается установленным, не таким же образом, как в исходном дереве.
Таким образом, чтобы сделать эту работу, то, что вам нужно сделать, это:
- Делают «развитие» установить в исходном дереве.
- Возьмите каждый файл, который будет установлен, и заверните его источник в гигантскую строку (первая обратная косая черта - избегайте любых тройных кавычек); а затем функция, которая
compiles
, что строка, exec
s в новом globals dict, строит объект types.ModuleType
из этого dict
и вставляет его в sys.modules
dict; а затем вызов этой функции.
- Объедините обернутые файлы в порядке обратного топологического сортирования, по которому импортируется файл, который.
- Встроить результат в начало файла.
только очень сложно, в отличие от утомительной, биты здесь:
- Модули являются объектами первого класса, с типом с нормальным конструктором и все.
import spam
всегда ищет sys.modules['spam']
перед поворотом на модуль загрузчика, так что если вы предварительно заполнить, что import
будет просто принять его
В теории, это должно работать. Или что-то близко к нему; Возможно, я пропустил деталь. На практике я искренне сомневаюсь, что вы хотите это сделать.
Если модуль должен быть _компилирован, как в компиляторе C, то это определенно не сработает. Но я думал, что Fabric был чистым Python, поэтому я не уверен, почему у этой проблемы есть проблемы. – abarnert
Почему бы вам не включить его в структуру вашей программы? –
Нет; вы ** не можете ** заменить заявления. –