pypi UserWarning: Bilinmeyen dağıtım seçeneği: 'install_requires'


112

python setup.py installBir PyPI paketini çalıştırırken bu uyarı ile karşılaşan var mı ?

install_requirespaketin ne gerektirdiğini tanımlar. Pek çok PyPI paketi bu seçeneğe sahiptir. Nasıl "bilinmeyen bir dağıtım seçeneği" olabilir?



@tripleee belki, ama bu soru ondan daha önce sorulmuştu.
Tyler Long

Soru yaşı ikincil bir sorun ama benim de güçlü bir fikrim yok. Yinelenen adaylığın tersine gitmesini istiyorsanız, görünürlük için bir Meta Yığın Taşması sorusu oluşturabilirsiniz. Şahsen benim için, diğer sorunun kabul edilen cevabı bana daha çok yardımcı oldu, çünkü daha doğrudan ve odaklanmış. Görünüşe göre bu cevaplardan hiçbirini kabul etmemişsin, bu yüzden bu gerçekten değiştirebileceğin bir faktör.
üçlü

1
@tripleee, bu konuyu dikkatlice okursanız, mükemmel bir cevabın olmadığını anlayacaksınız. Bu yüzden hangi cevabı kabul edeceğimi bilmiyorum. Kendimi bile ikna edemeyen bir cevap seçerek insanları yanıltmak istemiyorum.
Tyler Long

Yanıtlar:


89

python setup.pyinstall_requires'i desteklemeyen distutils kullanır. setuptools yapar, ayrıca dağıtır (halefi) ve pip (ikisini de kullanır) yapar. Ama aslında onları kullanmak zorundasın. Yani kurulum araçlarını easy_installveya pip install.

Başka bir yol da setup.py'nizdeki kurulum araçlarından kurulumu içe aktarmaktır, ancak bu standart değildir ve paketinizi kullanmak isteyen herkesin kurulum araçlarının yüklü olmasını gerektirir.


3
Diyelim ki kullanmak istiyorum pip, o zaman setup.pyyalnızca yerinde bir uzantı oluşturmak istiyorsam dosyayı nasıl çalıştırırım ?
Fred Foo

11
Uyarı, kodunuzu paketlemenizi engellemez, böylece kodunuzu çalıştırıp python setup.py sdistyükleyebilirsiniz pip install resulting_package.tar.gz. pip install -eDoğrudan kaynaktan yüklemek için de kullanabilirsiniz , ancak her zaman doğrudan paketten veya depodan yüklemeyi tercih ettim ..
Sebastian Blask

Bu biraz karışık. Kurulumu her zaman önce kurulum araçlarından içe aktarmayı deneyebilir, aksi takdirde dağıtımlarla gidip uyarı alabilirsiniz. Bununla birlikte, pypy durumundaysa, setuptools tanımlayıcıları düzgün bir şekilde kapatmadığı için "Çok fazla açık dosya" ile karşılaşabilirsiniz (Debian'da bile, varsayılan ulimit -n 1024): bugs.pypy.org/issue878
fiorix

1
Cevabımı görün - anlayabildiğim kadarıyla, bu sadece kurulum araçlarında basit bir hata. Kullanıcı yanlış bir şey yapmıyor, kurulum araçları.
ncoghlan

Bu dolaylı olarak sorumu cevaplıyor: Hatayı çalıştırmanın bir sonucu olarak aldım pip install pendulum==1.4.4. Çalıştırmak pip install setuptools --upgradehatayı temizledi.
Hesap atmak

32

Bu, google aramamdaki ilk sonuçtu, ancak cevabı yoktu. Kurulum araçlarını yükseltmenin sorunu benim için çözdüğünü öğrendim (ve iyi önlem için pip)

pip install --upgrade pip
pip install --upgrade setuptools

Umarım bu, sonraki kişinin bu bağlantıyı bulmasına yardımcı olur!


Bu benim için de çözdü. (Python 3.4, deniyor pip3 install neovim-remote.)
Michael Iles

Bu benim için çalıştı. Python 2.7.16 üzerine mako yüklemeye çalışıyordum. Benzer bir Bilinmeyen Dağıtım seçeneği var. Pip iyiydi ancak kurulum araçları 40.6.2'den 41.0.1'e gitti. Sonra Mako, A-OK'i kurdu.
Max Yaffe

18

DİKKAT ! DİKKAT ! İleride kusurlu cevap. Python evrenindeki ambalaj durumuyla ilgili "en son notu" almak için, oldukça ayrıntılı bu makaleyi okuyun .

Ansible oluşturmaya / kurmaya çalışırken bu problemle karşılaştım. Sorun şu ki, dağıtımlar gerçekten install_requires'i desteklemiyor . Setuptools , dağıtımları anında maymunla yaması yapmalıdır, ancak bunu yapmaz, çünkü kurulum araçlarının son sürümü 2009'dan 0.6c11 iken distutils bir çekirdek Python projesidir.

Bu nedenle, setuptools-0.6c11-py2.7.egg'i manuel olarak kurduktan sonra bile, setup.py yalnızca distutils'i alır, site paketleri / setuptools / 'dan değil.

Ayrıca, setuptools dokümantasyonu ez_setup kullanmak için ipucu verir, distutils'i değil.

Ancak, bugünlerde setuptools'un kendisi dağıtım tarafından sağlanmaktadır ve bu setup () çeşidi, install_requires'ı destekler.


1
Olumsuz oy verildi, çünkü bu yanıt, farklı şeylerin ne olduğuna dair bazı dezenformasyon ve kafa karışıklığı içeriyor. örneğin ez_setup.py, kurulum araçları için bir önyükleme yükleyicisidir ve dağıtımlar yerine "" kullanılabilecek bir şey değildir. Çoğu PyPI paketi "tamamen yanlış" değildir.
Iguananaut

1
@Iguananaut, cevabı gözden geçirdiğiniz için teşekkürler; Ben düzenledim.
PAStheLoD

Oh harika, teşekkürler. Bu durumda tekrar oy vereceğim :) Nick Coghlan'ın bağlantı verdiğiniz makalesi, daha önce iş arkadaşlarımla bu konuyu kafalarını toplamalarını sağlamaya çalışmak için paylaştığım bir makale.
Iguananaut

Mart 2013'teki durum hakkında harika bir makale. Bir soru ... Yazar şöyle diyor: " setuptoolsve distributeprojeleri yeniden birleşme sürecinde, ancak birleşme henüz tamamlanmadı (Bu makaleyi en kısa sürede güncelleyeceğim. bu değişir). " 2019 yılına kadar durumunun ne olduğunu bilen var mı? Python 2.7'nin Kullanım Ömrü Sonu tarihinin hızla yaklaşmasıyla birlikte, birçok python paketi güncelleme ve yeniden paketleme sürecinde olacak.
TrinitronX

16

Python 2.7.11 ile bir Mac kullanıyorum. Son derece basit ve anlaşılır projeler yaratmaya çalışıyordum, burada tek ihtiyacım çalıştırabilmem python setup.py installve setup.pyideal olarak dağıtımlardan kurulum komutunu kullanabilmem. Kelimenin tam anlamıyla, setup()burada not ettiğimden başka kwarglardan başka bir ithalat veya kod yok.

Dosyam için içe aktarma işlemleri setup.pyşu olduğunda hatayı alıyorum :

from distutils.core import setup

Bunu kullandığımda aşağıdaki gibi uyarılar alıyorum

/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Bilinmeyen dağıtım seçeneği: 'entry_points' warnings.warn ( msj)

İçe aktarımı (ve başka hiçbir şeyi ) şu şekilde değiştirirsem:

from distutils.core import setup
import setuptools  # noqa

Uyarılar kaybolur.

Kullanmadığımı setuptools, sadece içeri aktarmanın davranışı artık uyarı vermeyecek şekilde değiştirdiğini unutmayın. Benim için, kullandığım bazı projelerin bu uyarıları verdiği ve bazılarının vermediği gerçekten şaşırtıcı bir farkın nedeni bu.

Açıktır ki, bir çeşit maymun yamalama devam ediyor ve bu ithalatın yapılıp yapılmamasından etkileniyor. Muhtemelen bu sorunu araştıran herkes için durum bu değildir, ancak çalıştığım dar ortam için aradığım cevap budur.


Bu, diğer (topluluk) yorumuyla tutarlıdır; bu, dağıtımcıların kurulum araçlarını kullanması gerektiğini ve Ansible'ı yüklerken sorun yaşadıklarını belirtir. Ansible, geçmişte kurulum araçlarına sahip olmadan kurulumlara izin vermeye çalışmış ve daha sonra buna geri dönmüş gibi görünüyor.

https://github.com/ansible/ansible/blob/devel/setup.py

Havada pek çok şey var ... ancak basit bir proje için basit bir cevap arıyorsanız, muhtemelen kurulum araçlarını içe aktarmalısınız.


1
Eklemek import setuptoolsde mucizevi bir şekilde sorunu benim için ubuntu 16.04'te python 3.5 ile çözdü.
kuropan

8

Bu, dağıtımlardan gelen bir uyarıdır ve kurulum araçlarının kurulu olmadığının bir işaretidir. Http://pypi.python.org/pypi/setuptools adresinden yüklemek uyarıyı kaldıracaktır.


32
setuptools yüklendi. hala uyarı var.
Tyler Long

Çok haklısın, bu hatayı Python 2.6.6'da setuptools veya distribute kurulu olsa bile alıyorum. 2.7.2 ile denersem, yine de gitti.
Fredrik Håård

4
Bu problemi python 2.7.3'te yaşıyorum
Calvin Cheng

2
Bu benim için yaptı: wget bootstrap.pypa.io/ez_setup.py -O - ​​| sudo python
radtek

Teşekkürler @radtek, benim için de çalıştı. Belki bir cevap olarak yorumunuzu yapabilirsiniz?
Esteis

4
sudo apt-get install python-dev  # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

Eksik başlıkları yükleyecektir. Sorunumu çözdü


4

Sonuç olarak :

distutilsdesteklemiyorsa install_requiresveya entry_points, setuptoolsyok.

değişim from distutils.core import setupiçinde setup.py dosyası için from setuptools import setupsizin veya refactor setup.py dosyası sadece kullanmak distutilssahiptir.

Buraya geldim çünkü entry_pointssadece bir setuptoolsözellik olduğunu fark etmemiştim .

Burada dönüştürmek isteyen varsa setuptoolsiçin distutilsbenim gibi:

  1. kaldırmak install_requiresgelen setup.py dosyası ve sadece kullanmak requirements.txt ilepip
  2. değişim entry_pointsiçin scripts( doc ) ve güvenerek herhangi modüller planı ayrı entry_pointsshebangs ve bir giriş noktası ile tam komut olmak.

Önerilen paketin ne olduğunu anlamaya çalışıyorum. "Yalnızca dağıtım özelliklerini kullan" yazarsınız ve ayrıca "kurulum araçlarını dağıtımlara dönüştür" yazarsınız, ancak "giriş_ noktaları yalnızca bir kurulum araçları özelliğiydi" ifadesi de biraz çelişkili görünüyor?
chrisinmtown

2

Anlayabildiğim kadarıyla bu, standart kitaplıkta temel sınıfa çağırmadan önce kurulum araçlarına özgü seçenekleri kaldırmadığı kurulum araçlarında bir hatadır: https://bitbucket.org/pypa/setuptools/issue/29 / önlemek-userwarnings-yaydığı-çağrılırken

Eğer koşulsuz varsa import setuptoolssizin de setup.py(aynı yapmanız gerekir Setuptools'u özel seçenekler kullanılıyorsa), sonra komut ile başarısız değil gerçeği ImportErrorSetuptools düzgün yüklü olduğunu gösterir.

Uyarıyı aşağıdaki şekilde susturabilirsiniz:

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>

Bunu yalnızca , kurulum araçları yüklü değilse tamamen başarısız olacak koşulsuz içe aktarmayı kullanırsanız yapın :)

(Bu aynı davranışı birleşme sonrası kurulum araçları deposundan bir ödeme sırasında görüyorum, bu yüzden bunun bir sistem yapılandırma sorunu yerine bir kurulum araçları hatası olduğundan eminim. Ön birleştirme dağıtımının aynı sorunu yaşayacağını umuyorum)


0

Bunu şimdi Python2.7 kullanan eski araçlarda gördüm, burada bir yapının (Dockerfile gibi) sabitlenmemiş bir bağımlılık yüklediği, örneğin pytest. PyTest, Python 2.7 desteğini bıraktı, bu nedenle yeni paket sürümünün <sürümünü belirtmeniz gerekebilir.

Ya da mermiyi ısırıp, uygulanabilirse bu uygulamayı Python 3'e dönüştürün.

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.