2015-07-16 5 views
7

Я написал несколько библиотек в Python для использования в моем проекте. Я сохранил их локально в своей системе, а также удаленно на Github. Теперь каждый раз, когда я пишу код, я использую вначале sys.path.append(), чтобы помочь импортировать мои библиотеки из каталога в моей системе. Мне было интересно, что если есть в любом случае импортировать эти файлы непосредственно из моего репозитория GithubИмпорт библиотек python из Github

ссылку на мой репозиторий это - Quacpy

+0

Если они имеют 'setup.py' вы можете' пункт установить ... 'прямо из GitHub репо – jonrsharpe

ответ

1

Это чувствует себя немного от стены, но может работать для вас (если какой-либо из ваши библиотеки зависят друг от друга, вы должны изменить эти импорта в githubimports тоже !?):

import requests 
def githubimport(user, repo, module): 
    d = {} 
    url = 'https://raw.githubusercontent.com/{}/{}/master/{}.py'.format(user, repo, module) 
    r = requests.get(url).text 
    exec(r, d) 
    return d 

qoperator = githubimport('biryani', 'Quacpy', 'qoperator') 
2

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

Однако, если вы просто хотите использовать некоторые методы из другого файла вы можете загрузить этот файл, а затем импортировать его:

import urllib2 

def download(url): 
    filename = url.split('/')[-1] 
    print 'Downloading', filename 
    f = urllib2.urlopen(url) 
    data = f.read() 
    f.close() 
    with open(filename, 'w') as myfile: 
     myfile.write(data) 

# get repository 
download('https://raw.githubusercontent.com/biryani/Quacpy/master/auxfun.py') 

# try to import something from it 
from auxfun import qregnorm 
q = qregnorm([0, 1, 2]) 
print 'Success! q =', q 

Может быть, вы могли бы даже загрузить весь почтовый индекс, распаковать его, а затем импортировать файлы.

+0

Спасибо! Это именно то, что я искал. Оказывается, это не так просто. – biryani

+0

Если ответ был именно тем, что вы искали, вы должны подумать о принятии его принятого ответа ;-) – adrianus

2

Предполагая, что у вас есть файл setup.py, pip поддерживает установку на основе git. См https://pip.pypa.io/en/latest/reference/pip_install.html#git подробности

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

pip install -e git+https://github.com/biryani/Quacpy.git#egg=quacpy 
Obtaining quacpy from git+https://github.com/biryani/Quacpy.git#egg=quacpy 
    Cloning https://github.com/biryani/Quacpy.git to /.../quacpy 
    Complete output from command python setup.py egg_info: 
    Traceback (most recent call last): 
     File "<string>", line 18, in <module> 
    IOError: [Errno 2] No such file or directory: '/.../quacpy/setup.py' 

    ---------------------------------------- 
    Command "python setup.py egg_info" failed with error code 1 in /.../quacpy 
+0

Спасибо за ответ. Но я не хочу устанавливать модуль, а импортировать некоторые файлы из него удаленно каждый раз, когда я запускаю код. Ваш метод - разумный способ сделать это, хотя. – biryani

2

Это импортирует весь репозиторий как модуль, Python 3:

import sys 
import urllib.request # python 3 
import zipfile 
import os 

REPOSITORY_ZIP_URL = 'https://github.com/biryani/Quacpy/archive/master.zip' 

filename, headers = urllib.request.urlretrieve(REPOSITORY_ZIP_URL) 

zip = zipfile.ZipFile(filename) 

directory = filename + '_dir' 

zip.extractall(directory) 

module_directory_from_zip = os.listdir(directory)[0] 
module_directory = 'Quacpy' 
os.rename(os.path.join(directory, module_directory_from_zip), 
      os.path.join(directory, module_directory)) 

sys.path.append(directory) 

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