2015-07-16 21 views
7

Napisałem kilka bibliotek w Pythonie do wykorzystania w moim projekcie. Zapisałem je lokalnie w moim systemie, a także zdalnie na Github. Teraz za każdym razem, gdy piszę jakiś kod, na początku używam sys.path.append(), aby pomóc importować moje biblioteki z katalogu w moim systemie. Zastanawiałem się, że jeśli nie ma w każdym razie importować te pliki bezpośrednio z mojego repozytorium GitHubImportowanie bibliotek Pythona z Github

link do mojego repo jest - Quacpy

+0

jeśli mają 'setup.py' można' '... pip zainstalować bezpośrednio z gitHub repo – jonrsharpe

Odpowiedz

1

to czuje się trochę od ściany, ale może pracować dla Ciebie (jeśli którykolwiek z twoje bibliotek zależą od siebie, trzeba będzie zmienić te przywozy do githubimports zbyt !?):

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

Jeśli chcesz użyć repo, który ma być zainstalowany, nie jestem pewien, jak byś chcesz zautomatyzować instalację wewnątrz innego skryptu python (również co zrobić, jeśli instalacja się nie powiedzie).

Jednakże, jeśli chcesz po prostu korzystać z niektórych metod z innego pliku, można pobrać ten plik, a następnie zaimportować go:

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 

Być może można nawet pobrać cały zip, rozpakuj go, a następnie zaimportować akta.

+0

Dzięki! Właśnie tego szukałem. Okazuje się, że nie jest to takie proste. – biryani

+0

Jeśli odpowiedź była dokładnie tym, czego szukałeś, powinieneś rozważyć zaakceptowanie tej odpowiedzi ;-) – adrianus

2

Zakładając, że masz prawidłowy plik setup.py, pip obsługuje instalację opartą na git. Zobacz https://pip.pypa.io/en/latest/reference/pip_install.html#git szczegółowe informacje

Spoiler: Bo nie mają setup.py plik, zobaczysz następujący błąd przy próbie korzystania pip obecnie:

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

Dzięki za odpowiedź. Ale nie chcę instalować modułu, a raczej importować niektóre pliki z niego zdalnie za każdym razem, gdy uruchamiam kod. Twoja metoda jest rozsądnym sposobem, aby to zrobić. – biryani

2

ten importuje całe repozytorium jako moduł, 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 
Powiązane problemy