2014-04-14 16 views
6

pyodbc yüklemek istediğimi söyle. Bazı Windows makinelerinde yapılamaz, ancak 'un python uygulaması olan bir pypyodbc var.Farklı bağımlılıklar (geri dönüş) 'de setup.py içinde

setuptools.setup için install_requires=["pyobdc"]10, eski paket yüklenmemişse pypyodbc'a geri dönmenin bir yolu var mı?

UPD: Bu özel durum için Çözümümün:

import sys 
from setuptools import setup 

if sys.platform.startswith("win"): 
    pyodbc = "pypyodbc>=1.2.0" 
else: 
    pyodbc = "pyodbc>=3.0.7" 

... 

setup(
     ... 
     install_requires=[pyobdc] 
    ) 

Ama hala daha genel bir çözüm arayın.

+0

Ben senin yaklaşımı yanlış bir şey görmüyorum. Bu, dokümanlara göre geçerli görünüyor. https://pythonhosted.org/setuptools/setuptools.html#declaring-dependencies – rh0dium

cevap

1

Halihazırda yapmakta olduğunuz işi yapmak genel bir öneri gibi görünmektedir, ancak bu soru bu tür bir soru için en popüler Google çarpanı olduğundan, install_requires'un PEP 508 numaralı belgede belirtilen oldukça karmaşık bir mini dili desteklediğini belirteceğim :

install_requires = [ 
    'pypyodbc>=1.2.0;platform_system=="Windows"', 
    'pyodbc>=3.0.7;platform_system!="Windows"' 
] 

In a comment to a related question, kullanıcı Marius Gedminas notlar olduğunu haiz senin install_requires yukarıda bu sorunu önlemek için tercih edilmelidir, böylece bazı olumsuz etkileri olabilir kodunda bilgisayarlı.

(eğer setuptools eski sürümlerini desteklemek zorunda Öte yandan, https://hynek.me/articles/conditional-python-dependencies/ çok ciddi taşınabilirlik sorunları yakınır.)

+0

Şimdiye kadar foo || gibi bir sözdiziminin herhangi bir belirtimini veya pratik örneğini bulamadım. Debian paketlerinde, 'foo' veya 'bar' yüklenmesini istediğinizi söyleyen bir sözdizimi. – tripleee

0

Çözümünüz bu durum için doğru olanıdır. Bu görevi başarmak için şu anda en iyi ve daha esnek bir yoldur.

İlgili konular