2013-04-21 22 views
14

Piszę aplikację Django wielokrotnego użytku, jak opisano tutaj: https://django.readthedocs.org/en/1.5.x/intro/reusable-apps.htmlsetup.py: Oczekuje nawiasach lista gdy wymagana nazwa pakietu zawiera kreskę

Kiedy określić wymóg setup.py który zawiera odrobinę w pakiecie nazwa, setup.py nie będzie działać. Na przykład, jeśli mój plik setup.py zawiera tę linię:

requires=[ 'djangotinymce', 'MtFileUtil', 'Django', 'PyYAML', ], 

Następnie działa poprawnie.

python ./setup.py sdist 
running sdist 
... 
Creating tar archive 

Gdybym zmienić linię aby wyglądać tak:

requires=[ 'django-tinymce', 'MtFileUtil', 'Django', 'PyYAML', ], 

Dostajemy dziwny błąd

Traceback (most recent call last): 
    File "./setup.py", line 32, in <module> 
    'Topic :: Internet :: WWW/HTTP :: Dynamic Content', 
    File "/usr/lib/python2.7/distutils/core.py", line 112, in setup 
    _setup_distribution = dist = klass(attrs) 
    File "/home/travis/venv/deleteme/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg/setuptools/dist.py", line 225, in __init__ 
    _Distribution.__init__(self,attrs) 
    File "/usr/lib/python2.7/distutils/dist.py", line 259, in __init__ 
    getattr(self.metadata, "set_" + key)(val) 
    File "/usr/lib/python2.7/distutils/dist.py", line 1220, in set_requires 
    distutils.versionpredicate.VersionPredicate(v) 
    File "/usr/lib/python2.7/distutils/versionpredicate.py", line 113, in __init__ 
    raise ValueError("expected parenthesized list: %r" % paren) 
ValueError: expected parenthesized list: '-tinymce' 

jestem pewien, co z tym zrobić. Chcę wymagać django-tinymce, ale nie widzę, jak to zrobić.

Odpowiedz

16

Argument require pochodzi z distutils i oczekuje nazw pakietów Pythona (niektóre tutaj: documentation). Ponieważ używasz setuptools, należy użyć argumentu install_requires zamiast, który nie obsługuje nazwy pakietów PyPI:

install_requires=['djangotinymce', 'MtFileUtil', 'Django', 'PyYAML'], 

Więcej informacji na Declaring Dependencies w dokumentacji setuptools.

+0

Aby dodać wyjaśnienie do powyższego komentarza, należy usunąć litery -'s. Python to operatory arytmetyczne. Tj. "Django-tinymce" -> "djangotinymce". – Rebs