Pipfile ve Pipfile.lock nasıl kullanılır?


132

Görünüşe göre Pipfile / Pipfile.lock, Python paketlemesi bağlamında Requirements.txt yerine kullanılmak üzere tasarlandı. Bununla birlikte, bunların gerçekte nasıl çalıştığına dair çok fazla belge yok. Burada Python web sitesinin PyPi bölümünde pipfile'ın gelişen bir tanımını buldum ama oldukça dağınık ve dosyanın farklı bölümlerinin anlamlarını açıklamıyor.

Bu dosyaların nasıl anlaşılacağına dair herhangi bir işaret var mı?


2
Bu doğrudan bir analog olduğunu Gemfileve Gemfile.lockYakut dünyadan: .lockdosyası, her bağımlılık için özel versiyonları vardır; bu uzantıya sahip olmayan yalnızca insanların kontrol ettiği bilinen versiyonlara sahiptir. Bununla birlikte, hala gelişmekte olan ve iyi tanımlanmış, çok daha az standartlaştırılmış olmaktan çok uzak olan bir şeyin açıklamasını istemek, belki biraz erken.
Charles Duffy

(Ve benzer şekilde, arasındaki fark Pipfileve requirements.txtbüyük ölçüde birincisinin Ruby dünyasındaki özellikleri benimsemeye çalışması, yani birden çok ortam için bağımlılık kümelerini ve tek bir dosya içinde koşullar / seçenekler / vb. İle belirtebilmesidir).
Charles Duffy

1
Görünüşe göre, Heroku "Python ile başlarken" deposunda ( github.com/heroku/python-getting-started.git ) zaten konuşlandırılmış gibi, beğenin veya beğenmeyin, üretime alınmış gibi görünüyor.
Stephen

Anladım. Bununla birlikte - dokümanlar bana oldukça sağlam görünüyor. Sadece onları yeniden ifade etmeyecek bir cevapta ne yazabilirim bilmiyorum.
Charles Duffy

1
OP'de yaptığım bağlantıya atıfta bulunuyorsanız, o zaman atlanmış bir dizi şey vardır, örneğin, bir şeyin source adlı bir bölümde olması gerçekte ne anlama geliyor?
Stephen

Yanıtlar:


166

Ruby'nin Bundler'ına veya Node's Npm'ye biraz aşinaysanız, bu dosyaların arkasındaki konsept basit ve mevcut diğer araçlara benzer. Pipenvbu hedeflere ulaşmak için Pipfile ve Pipfile.lock dosyalarını kullanan bir paket ve sanal ortam yönetim aracıdır.

Pipenv, sanal ortamı sizin için varsayılan bir standart yolla yönetir (daha fazla etkinleştirmeye ve devre dışı bırakmaya gerek yoktur). Aşağıda, başlamanıza yardımcı olacak bazı temel bilgiler, pipenv web sitesinde daha fazlasını görün .

Başlangıç

Proje klasör türünüzde pipenv kullanmaya başlamak kolaydır ...

$ pipenv install

... ve zaten bir requirements.txtdosyası varsa Pipfile, gereksinimleri ve sanal ortam klasörünü içeren bir dosya oluşturacak , aksi takdirde boş bir Pipfiledosya oluşturacaktır . Yüklediğiniz bir şeyden hoşlanmadıysanız veya fikrinizi değiştirdiyseniz, şunu yazın ...

$ pipenv uninstall <package>

... ve gitmekte fayda var. Pipenv'in halihazırda oluşturduğu sanal ortamı etkinleştirmek için ...

$ pipenv shell

... ve sanal ortamınız etkinleştirilecektir. Çevreyi terk etmek için ...

$ exit

... ve orijinal terminal oturumunuza geri döneceksiniz.

Pipfile

Pipfile dosya hem geliştirme ve yürütme için, Python uygulama veya kitaplık için paketler şartlarını belirlemek amaçlanmıştır. Bir paketi basitçe kullanarak kurabilirsiniz ...

$ pipenv install flask

... ve dağıtım ve yürütme için bir bağımlılık olarak veya kullanılarak eklenecektir ...

$ pipenv install --dev pytest

... ve geliştirme süresi için bir bağımlılık olarak kullanılacaktır. Dosya sözdizimi aşağıdaki gibi oldukça basittir.

[[source]] # Here goes your package sources (where you are downloading your packages from).
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages] # Here goes your package requirements for running the application and its versions (which packages you will use when running the application).
requests = "*"
flask = "*"
pandas = "*"

[dev-packages] # Here goes your package requirements for developing the application and its versions (which packaes you will use when developing the application)
pylint = "*"
wheel = "*"

[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

Pipfile.lock içinde paketler mevcut dayalı, belirtmek için tasarlanmıştır Pipfile otomatik birbirine bağlıdır paketleri yükseltme ve proje bağımlılık ağacını kırma risklerinden kaçınma, bunların belirli sürümü kullanılmalıdır.

Şu anda kurulu paketlerinizi şunu kullanarak kilitleyebilirsiniz ...

$ pipenv lock

... ve araç, şu anda kurulu sürümlere göre sizin için otomatik olarak kilit dosyası oluşturmak için sanal ortam klasörünüzü arayacaktır. Dosya sözdizimi Pipfile için olduğu kadar açık değildir , bu nedenle kısalık uğruna burada gösterilmeyecektir.


Bu ilginç bir cevap, ancak sorduğumda aslında neyin kastedildiğini tam olarak anlayamadığımı düşünüyorum [[source]], mesela pipenv veya başka bir şey tarafından indirilen paketlerin kaynağı mı? Sanırım iki dosyanın geri kalanı yeterince açık.
Stephen

1
Kabul ediyorum, kafa karıştırıcı buldum çünkü [paket] / [dev-paket] farkının önemli olup olmadığına veya her şeyi [pakete] koymam gerektiğine karar vermem gereken bir öğretici üzerinde çalışıyorum. (Googling beni bu sayfaya yönlendiren şeydi.) Ama her ikisine de geliştirici eşyalarını [pakete] koyarken sahip olmak beni biraz şaşırttı. Yine de isteklerin neden [paket] içinde olması gerektiğini anlayabiliyordum.
Al Sweigart

1
Geliştirme paketlerinde karışıklığı önlemek için istendiği gibi değiştirildi, yorumunuz için teşekkürler, umarım şimdi daha az kafa karıştırıcıdır :)
danieldeveloper001

1
Kaynak kod gelişimi boyunca bir paket sürümlerini takip etmek istiyorsanız, paketlerin çoğunun üzerinde yıldız işareti olacağından, bunun iyi bir fikir olduğunu düşünüyorum Pipfile. Bir paket yükseltmesinde bir şey bozulursa, paket sürüm geçmişini gözden geçirerek bunu düzeltmek gerekir ve gerçekten de istek kitaplığının oluşturucularından biri bunu burada yapmanızı önerir .
danieldeveloper001

1
@Stephen, aslında tam tersidir, pipenv kurulum belgelerinde belirtildiği gibi --skip-lock, Pipfile.lockdosyayı kullanmaya zorlamak yerine onu yok saymaya zorlamak için bayrağı belirtebilirsiniz ;)
danieldeveloper001
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.