Python ana sürüm yükseltmesinden sonra paketleri otomatik olarak sanal ortama yeniden yükleyin


10

venvPython 3.6 modülü tarafından yapılan diskimde birkaç sanal ortam (düzinelerce) var . Şimdi bir aceleyle Ubuntu 19.10'a geçtim ve ancak daha sonra 3.6'nın genel olarak kabul edilen kaynaklardan Ubuntu 19.10 için mevcut olmadığını fark ettim. Bu sanal ortamların Python sürümlerinibin/python3 ana dizininin altına yerleştirerek python3.7 -mvenv --upgradeve içeren klasörlerde çalıştırarak yükseltmeyi başardım .

Şimdi, ise python3.7 -mvenv --upgradesanal ortamda yükseltmeleri Python, bu benim önceki paket sürümlerini yeniden hiçbir şey yapmaz lib/python3.7/site-packagesbunun altında venv. Ben, Python 3.6 yükleyerek bu yapmış olabilir sanırım pip freezeing den gereksinimleri venvve sonra Python 3.7 için venv yükseltme pip install -r- ing yalnızca Python 3.6 benim yeni işletim sistemi için kullanılabilir yüklemek yoktu.

Bunu Python 3.6'yı kaynaktan, conda kullanarak veya bazı rasgele PPA'lardan 3.6 kurmadan yüklemek zorunda kalmadan, oldukça otomatik bir şekilde (belki de esas pip freezeolarak eski lib/python3.6dizini kullanarak ) yapmanın başka bir yolu var mı ? Tüm ortamları toplu olarak yükseltmek istiyorum, böylece gelecekte rastgele bir ortamla bir şey yapmam gerektiğinde Python 3.7 ile çalışmaya devam edecek.

Yanıtlar:


11

Yeni 3.7 venv'de pkg_resourcesmevcut olmanız gerekir - setuptoolsoluşturulduğunda otomatik olarak kurulur. Değilse, sadece pip install setuptools.

setuptoolskütüphane kodu aslında iş pipyapmak için satıcı ne olduğunu pip freeze. Ancak manuel olarak dondurabilirsiniz.

# in 3.7 runtime...
import pkg_resources
old_site_dir = ".venv/lib/python3.6/site-packages/"
working_set = pkg_resources.WorkingSet([old_site_dir])
for dist in working_set:
    print(dist.as_requirement())

Bu çıktıyı bir requirements.txtdosyaya atabilir ve muhtemelen yeniden yapılandırılmış bir siteye sahip olabilirsiniz, python3.6çalışma zamanı gerekmez.

Projelerin dağıtım meta verilerindeki ortam işaretleyicilerini kullanarak python3.6 ve python3.7 için ayrı bağımlılık ağaçları beyan etmeleri mümkün olduğundan bu yöntemin% 100 kusursuz olmayabileceğini unutmayın (bkz. PEP 508 ). Sizin 3.6 sitede yüklü ürün 3.7 desteklemeyen olması da mümkündür hiç . Bununla birlikte, küçük bir versiyonda 3.6 ve 3.7 arasında bir çarpma olduğunu görmek oldukça nadirdir, bu yüzden sadece çalışma setini kullanmanın pratikte "yeterince iyi" olması gerekir.


"İyi yeterli" olduğu bu durumda yeterince iyi. Toplu iş yapıldıktan sonra burada ve orada tek modülü güncellemede sorun yok.
Antti Haapala
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.