2015-07-16 20 views
7

Projemde kullanmak için Python'da bazı kitaplıklar yazdım. Bunları yerel olarak sistemimde ve ayrıca Github'da da saklıyorum. Şimdi her kod yazdığımda, kütüphanelerimi sistemimdeki dizinden içe aktarmaya yardımcı olmak için başlangıçta sys.path.append() kullanıyorum. QuacpyGithub'dan python kitaplıklarını içe aktarma

+0

bir 'Eğer' yüklemek pip olabilir setup.py' ... 'bir GitHub repo – jonrsharpe

cevap

1

Bu duvardan biraz hissediyor ama herhangi if (sizin için işe yarayabilecek - Ben varsa zaten benim Github depo

benim repoya bağlantı doğrudan bu dosyaları aktarmak için de merak ediyorum bu senin kütüphaneleri birbirlerine bağlıdır, siz) !? çok githubimports için bu ithalatı değiştirmek gerekecek:

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

yüklü gereken bir repo kullanmak istiyorsanız, emin değilim nasıl olur başka bir python betiğindeki kurulumu otomatikleştirmek (kurulum başarısız olursa ne yapacağınız da). Sadece başka bir dosyadan bazı yöntemler kullanmak istiyorsanız

Ancak, bu dosyayı indirmek ve daha sonra alabiliriz:

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 

Belki hatta tüm zip indirmek olabilir, açın ve ardından içe Dosyalar.

+0

teşekkür doğrudan! Tam olarak aradığım şey bu. Çıkıyor o kadar basit değil. – biryani

+0

Bir cevap tam olarak aradığınız şey olsaydı, kabul edilen yanıtı oluşturmayı düşünmelisiniz ;-) – adrianus

2

Geçerli bir setup.py dosyanız varsayarsak, pip, git tabanlı yüklemeyi destekler. Ayrıntılar

için https://pip.pypa.io/en/latest/reference/pip_install.html#git

Spoiler bakınız:

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

Cevabınız için teşekkürler. Ancak, bir kod çalıştırdığım her defasında uzaktan bazı dosyaları almak yerine, modülü kurmak istemiyorum. Sizin yönteminiz bunu yapmak için mantıklı bir yoldur. – biryani

2

Bu şekilde bütün depo ithal: Bir setup.py dosyası olmadığından şu anda pip kullanmayı deneyin eğer, aşağıdaki hata görürsünüz modül, Python 3: onlar varsa

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