Paketler çevrimdışı nasıl kurulur?


160

Bir python paketini indirmenin en iyi yolu nedir ve başka bir makineye çevrimdışı kurulum için pypi'den bağımlılıklar? Pip veya easy_install ile yapmanın kolay bir yolu var mı? Internet'e bağlı olmayan bir FreeBSD kutusuna istek kitaplığı yüklemeye çalışıyorum.


Yanıtlar:


77

Paket PYPI üzerindeyse, paketi ve yerel bir dizine olan bağımlılıklarını indirin. Örneğin

$ mkdir / pypi && cd / pypi
$ ls -la
  -rw-r - r-- 1 pavel personeli 237954 Nis 19 11:31 Flask-WTF-0.6.tar.gz
  -rw-r - r-- 1 pavel personeli 389741 Şub 22 17:10 Jinja2-2.6.tar.gz
  -rw-r - r-- 1 pavel personeli 70305 11 Nisan 00:28 MySQL-python-1.2.3.tar.gz
  -rw-r - r-- 1 pavel personeli 2597214 10 Nis 18:26 SQLAlchemy-0.7.6.tar.gz
  -rw-r - r-- 1 pavel personeli 1108056 22 Şub 17:10 Werkzeug-0.8.2.tar.gz
  -rw-r - r-- 1 pavel personeli 488207 10 Nis 18:26 boto-2.3.0.tar.gz
  -rw-r - r-- 1 pavel personeli 490192 Nis 16 12:00 flask-0.9-dev-2a6c80a.tar.gz

Bazı paketlerin benzer görünümlü tarballlara elle arşivlenmesi gerekebilir. Bir şeyin daha yeni (daha az kararlı) bir versiyonunu istediğimde bunu çok yapıyorum. Bazı paketler PYPI'de değildir, bu yüzden onlar için de geçerlidir.

Düzgün biçimli bir Python uygulamanız olduğunu varsayalım ~/src/myapp. dizininizde bulunan bir veya daha fazla şeyden söz eden bir listeye sahip ~/src/myapp/setup.pyolacaktır . Şöyle ki:install_requires/pypi

  install_requires=[
    'boto',
    'Flask',
    'Werkzeug',
    # and so on

Uygulamanızı hala hacklerken gerekli tüm bağımlılıklarla çalıştırabilmek istiyorsanız, şöyle bir şey yaparsınız:

$ cd ~ / src / myapp
$ python setup.py develop --always-unzip --allow-hosts = Yok --find-links = / pypi

Bu şekilde uygulamanız doğrudan kaynak dizininizden yürütülür. Bir şeyleri hackleyebilir ve daha sonra hiçbir şey yeniden oluşturmadan uygulamayı yeniden çalıştırabilirsiniz.

Uygulamanızı ve bağımlılıklarını geçerli python ortamına yüklemek istiyorsanız, şöyle bir şey yaparsınız:

$ cd ~ / src / myapp
$ easy_install --always-unzip --allow-hosts = Yok --find-links = / pypi.

Her iki durumda da, /pypidizinde bir veya daha fazla bağımlılık yoksa derleme başarısız olur . Eksik şeyleri internetten karışık bir şekilde yüklemeye çalışmaz.

Çok çağırmak için tavsiye setup.py develop ...ve easy_install ...aktif içindeki sanal ortamda global Python ortamı kirletmesini önlemek için. Bu (sanalenv) hemen hemen gitmek için bir yoldur. Global Python ortamına hiçbir şey kurmayın.

Uygulamanızı oluşturduğunuz makine, üzerine yerleştirmek istediğiniz makine ile aynı mimariye sahipse, easy_installher şeyi kullandığınız tüm sanal ortam dizinini tarball edebilirsiniz. Ancak top atmadan hemen önce sanal ortam dizinini yeniden konumlandırılabilir yapmalısınız (bkz. --Relocatable seçeneği). NOT: Hedef makinenin aynı Python sürümüne sahip olması ve uygulamanızın sahip olabileceği C tabanlı bağımlılıkların da önceden kurulu olması gerekir (örn. PIL'a bağlıysanız, libpng, libjpeg, vb. Önceden yüklenmiş olmalıdır) .


3
Bunun yerine --allow-hosts=Noneanahtarı kullanabilirsiniz--no-index
romor

Lütfen düzgün bir şekilde oluşturulmuş bir Python uygulamasının nasıl oluşturulacağını açıklayabilir misiniz?
psr


300

Pip downloadkomutu paketleri kurmadan indirmenize izin verir:

pip download -r requirements.txt

(Pip'in önceki sürümlerinde, bu yazılmıştır pip install --download -r requirements.txt.)

Ardından pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt, indirilen sdistleri ağa erişmeden yüklemek için kullanabilirsiniz .


bununla ilgili sorun, bağımlılıkların başka bağımlılıklara sahip olabilmeleridir ve bağımlılıklar indirilmeyecektir.
Vikki

Yılan sepeti (pip üzerine inşa edilmiştir) bağımlılıkların bağımlılıklarını da indirecektir.
Vikki

14
@vikki Doğru değil, "pip install --download" bağımlılıkları da indirir, bu nedenle gereksinimleriniz ek bağımlılıklar olsa bile yukarıdaki komutlar düzgün çalışır. Yılan sepeti başka yararlı şeyler yapabilir (hiç kullanmadı), ancak bu nedenle kesinlikle gerekli değildir.
Carl Meyer

6
@vikki Ne dediğini anlıyorum, ama bunun doğru olmadığını söylüyorum :-) Aslında aynı iddiayı tekrar göndermeden önce denemelisin. Ben sadece "pytest" bir gereksinimleri.txt koymak, "pip install --download. -R gereksinimleri.txt" koştu, ve hem pytest hem de onun setup.py bağımlılığı, "py" için sdists indirdi.
Carl Meyer

3
Bence olması gerekir: --find-links file:/path/to/some/dir/ve indirmek ve aynı pip sürümü ile yüklemeniz gerekir - aksi takdirde başarısız olabilir
A. Binzxxxxxx

57

Python kütüphanelerini ve bağımlılıklarını çevrimdışı olarak kurmak istiyorsanız, aynı işletim sistemi, ağ bağlı ve python yüklü bir makinede şu adımları izleyin:

1) requirements.txtBenzer içeriğe sahip bir dosya oluşturun (Not - bunlar indirmek istediğiniz kütüphanelerdir):

Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0

Gereksinimler dosyasını oluşturmak için bir seçenek kullanmaktır pip freeze > requirements.txt. Bu, ortamınızdaki tüm kitaplıkları listeler. Ardından, requirements.txtihtiyaç duyulmayanlara girebilir ve kaldırabilirsiniz.

2) mkdir wheelhouse && pip download -r requirements.txt -d wheelhousekütüphaneleri ve dizinlere bağımlılıklarını indirmek için komut çalıştırınwheelhouse

3) needs.txt dosyasını wheelhousedizine kopyalayın

4) Arşiv tekerlek yuvası içine wheelhouse.tar.gziletar -zcf wheelhouse.tar.gz wheelhouse

Ardından wheelhouse.tar.gzhedef makinenize yükleyin :

1) Yürüt tar -zxf wheelhouse.tar.gz Dosyaları ayıklamak için

2) pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouseLibs ve bağımlılıklarını kurmak için çalıştırınız.


6
Bu, yeni başlayanlar için uygun adımlarla en açık cevaptır. Teşekkürler
kumarharsh

Bu şimdiye kadar gördüğüm en pitonik yol. Teşekkürler!
peluzza

2
ama talimatlarınızı takip pip installederek, sonunda ben şöyle diyor: HATA: gereksinimi karşılayan bir sürüm bulamadı ..`
DennisLi

@DennisLi python ve pip sürümünüz nedir?
chaokunyang

Bunu anladım, çünkü pip panda paketinin belirli bir versiyonunu benim gereksinimlerimde bulamıyor. Txt, çünkü pandaları 0.2 kurmak için pip3 kullandım
DennisLi

13

çevrimdışı python. Bunu yapmak için virtualenv kullanıyorum (izole Python ortamı)

1) pip ile çevrimiçi virtualenv yükleyin:

pip install virtualenv --user

veya whl ile çevrimdışı: bu bağlantıya gidin , son sürümü (.whl veya tar.gz) indirin ve şu komutla yükleyin:

pip install virtualenv-15.1.0-py2.py3-none-any.whl --user

kullanarak kullanmanıza --usergerek yok sudo pip….

2) Virtualenv kullanın

çevrimiçi makinede terminalli bir dizin seçin cdve şu kodu çalıştırın:

python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask

tüm paketleri kurduktan sonra requirements.txt, sanal ağınız aktifken bir

pip freeze > requirements.txt

yeni bir terminal açın ve benzeri bir env oluşturun myenv2.

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls

şimdi sizin requirements.txtve tranferred_packagesklasörünüzün bulunduğu çevrimdışı klasöre gidebilirsiniz . paketleri aşağıdaki kodla indirin ve hepsini tranferred_packagesklasöre koyun .

pip download -r requirements.txt

çevrimdışı klasörünüzü çevrimdışı bilgisayara götürün ve ardından

python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt

çevrimdışı klasörde neler var [gereksinimleri.txt, tranferred_packages {Flask-0.10.1.tar.gz, ...}]

paketinizin kontrol listesi

pip list

not: 2017'de olduğu gibi python 3'ü kullanmak daha iyidir. bu komutla python 3 virtualenv oluşturabilirsiniz.

virtualenv -p python3 envname

2
Burada eksik veya "gizlenmiş" adımlar var gibi görünüyor, ben 'devre dışı' ve sonra 'pip donma' ... cd çevrimdışı ve ./tranferred_packages hiçbir yerden görünüyor - açıkça bu bir temizleme gerekir?
Hannu

belki, ama 'Kısa bir yazı istedim' düşünmelisiniz, 'bu süreç karmaşıktı ve her adımı yazamadım (sadece YouTube'da mümkün)'.
cyera

Bu en iyi cevap imho. Çok yardımcı oldu
webofmars

Tranferred_packages klasörünün nasıl kurulacağı hakkında bir şey söylediyse, bu en iyi cevap olacaktır. Önemli adımlar olmadan, -1
Zim

8

Tarball'ı indirin, FreeBSD makinenize aktarın ve çıkarın, daha sonra çalıştırın python setup.py installve işiniz bitti!

EDIT: Sadece eklemek için, şimdi pip ile tarballs yükleyebilirsiniz.


1
Tüm bağımlılıklar ne olacak? Onları çözmenin en iyi yolu nedir? Bağımlılıkları manuel olarak da yüklemem gerekir mi?
Chris Drantz

Evet, bu talihsiz bir şekilde bildiğim tek yol.
dav1d

8

İşlemi adım adım izleyeyim:

  1. İnternet'e bağlı bir bilgisayarda bir klasör oluşturun.
   $ mkdir packages
   $ cd packages
  1. bir komut istemi veya kabuk açın ve aşağıdaki komutu yürütün:

    İstediğiniz paketin tensorflow

    $ pip download tensorflow

  2. Şimdi, hedef bilgisayarda packagesklasörü kopyalayın ve aşağıdaki komutu uygulayın

  $ cd packages
  $ pip install 'tensorflow-xyz.whl' --no-index --find-links '.'

Bunun tensorflow-xyz.whl, gerekli paketin orijinal adıyla değiştirilmesi gerektiğini unutmayın .


6

kullanma wheelDerlenmiş paketleri .

paketlemek:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)

tarball'ı kopyalayın ve kurun:

$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/*

Not wheelİkili paketlerin makineler arasında olmadığını .

Daha fazla ref. burada: https://pip.pypa.io/en/stable/user_guide/#installation-bundles


1
Python 3.6 ile makinede paketleme ve Python 3.5 ile başka bir makinede çıkarma ile ilgili sorunlar yaşadım: " <package> .whl bu platformda desteklenen bir tekerlek değil ". Kaynak ve hedef sürümlerin bazı paketlerle eşleşmesi gerekebilir.
Juuso Ohtonen

6

Benzer bir sorun yaşadım. Ve aynı şekilde kurmak zorunda kaldım, pypi'den yaptık.

Aşağıdaki şeyleri yaptım:

  1. İnternete erişimi olan tüm paketleri makinede saklamak için bir dizin oluşturun.

    mkdir -p /path/to/packages/
  2. Tüm paketleri yola indirin

    pip download -r requirements.txt -d /path/to/packages
    
    Eg:- ls /root/wheelhouse/  # **/root/wheelhouse** is my **/path/to/packages/**
    total 4524
    -rw-r--r--. 1 root root   16667 May 23  2017 incremental-17.5.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   34713 Sep  1 10:21 attrs-18.2.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root 3088398 Oct 15 14:41 Twisted-18.9.0.tar.bz2
    -rw-r--r--. 1 root root  133356 Jan 28 15:58 chardet-3.0.4-py2.py3-none-any.whl
    -rw-r--r--. 1 root root  154154 Jan 28 15:58 certifi-2018.11.29-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   57987 Jan 28 15:58 requests-2.21.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   58594 Jan 28 15:58 idna-2.8-py2.py3-none-any.whl
    -rw-r--r--. 1 root root  118086 Jan 28 15:59 urllib3-1.24.1-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   47229 Jan 28 15:59 tqdm-4.30.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root    7922 Jan 28 16:13 constantly-15.1.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root  164706 Jan 28 16:14 zope.interface-4.6.0-cp27-cp27mu-manylinux1_x86_64.whl
    -rw-r--r--. 1 root root  573841 Jan 28 16:14 setuptools-40.7.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   37638 Jan 28 16:15 Automat-0.7.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   37905 Jan 28 16:15 hyperlink-18.0.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   52311 Jan 28 16:15 PyHamcrest-1.9.0-py2.py3-none-any.whl
    -rw-r--r--. 1 root root   10586 Jan 28 16:15 six-1.12.0-py2.py3-none-any.whl
  3. Packages dizinini tarlayın ve internet erişimi olmayan bir Makine'ye kopyalayın. Sonra yapın,

    cd /path/to/packages/
    tar -cvzf packages.tar.gz .  # not the . (dot) at the end

    Packages.tar.gz dosyasını internet erişimi olmayan hedef makineye kopyalayın .

  4. İnternet erişimi olmayan makinede aşağıdakileri yapın (Katlanmış paketleri geçerli makinedeki / path / to / package / dizinine kopyaladığınızı varsayarak )

    cd /path/to/packages/
    tar -xvzf packages.tar.gz
    mkdir -p $HOME/.config/pip/
    
    vi $HOME/.config/pip/pip.conf

    aşağıdaki içeriği içine yapıştırın ve kaydedin.

    [global]
    timeout = 10
    find-links = file:///path/to/package/
    no-cache-dir = true
    no-index = true
  5. Son olarak, virtualenvpaketleri yüklemek için bir tür kullanmanızı öneririm .

    virtualenv -p python2 venv # use python3, if you are on python3
    source ./venv/bin/activate
    pip install <package>

/ Path / to / package / dizinindeki tüm modülleri indirebilmeniz gerekir .

Not: Sadece yaptım, çünkü seçenekler ekleyemedim ya da modülleri kurma şeklimizi değiştiremedim. Aksi takdirde yapardım

    pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt

3

Pip 8.1.2 pip download -r requ.txtiçin paketleri yerel makinenize indirmek için kullanabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.