Can Pip instaluje zależności Nie określone w setup.py w czasie instalacji?
Chciałbym, aby pip zainstalował zależność, którą mam na Githubie, gdy użytkownik wyda polecenie zainstalowania oryginalnego oprogramowania, również ze źródła na Githubie. Żaden z tych pakietów nie jest na PyPi (i nigdy nie będzie).
Użytkownik wydaje polecenie:
pip -e git+https://github.com/Lewisham/cvsanaly@develop#egg=cvsanaly
Ten repo ma Plik requirements.txt
, z inną zależnością od Githuba:
-e git+https://github.com/Lewisham/repositoryhandler#egg=repositoryhandler
To, co chciałbym, to pojedyncze polecenie, które użytkownik może wydać, aby zainstalować oryginalny pakiet, aby pip znalazł plik wymagań, następnie zainstaluj również zależność.
3 answers
Ta odpowiedź pomogła mi rozwiązać ten sam problem, o którym mówisz.
Nie wydaje się być łatwym sposobem na setup.py aby użyć pliku wymagań bezpośrednio do zdefiniowania jego zależności, ale te same informacje można umieścić w setup.py siebie.
Mam takie wymagania.txt:PIL
-e git://github.com/gabrielgrant/django-ckeditor.git#egg=django-ckeditor
Ale podczas instalacji tego wymagania.txt zawiera pakiet, wymagania są ignorowane przez pip.
To setup.py wydaje się zmuszać Pipa do instalacji zależności (w tym moja wersja github django-ckeditor):
from setuptools import setup
setup(
name='django-articles',
...,
install_requires=[
'PIL',
'django-ckeditor>=0.9.3',
],
dependency_links = [
'http://github.com/gabrielgrant/django-ckeditor/tarball/master#egg=django-ckeditor-0.9.3',
]
)
Edit:
Ta ODPOWIEDŹ zawiera również kilka przydatnych informacji.
Określenie wersji jako części " # egg=..."jest wymagane, aby określić, która wersja pakietu jest dostępna pod linkiem. zauważ jednak, że jeśli zawsze chcesz polegać na swojej najnowszej wersji, możesz ustawić wersję na dev
w install_requires, dependency_links i innych pakietach setup.py
Edit: używanie dev
jako wersji nie jest dobrym pomysłem, jak w komentarzach poniżej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:24
Oto mały skrypt, którego użyłem do wygenerowania install_requires
i dependency_links
z pliku wymagań.
import os
import re
def which(program):
"""
Detect whether or not a program is installed.
Thanks to http://stackoverflow.com/a/377028/70191
"""
def is_exe(fpath):
return os.path.exists(fpath) and os.access(fpath, os.X_OK)
fpath, _ = os.path.split(program)
if fpath:
if is_exe(program):
return program
else:
for path in os.environ['PATH'].split(os.pathsep):
exe_file = os.path.join(path, program)
if is_exe(exe_file):
return exe_file
return None
EDITABLE_REQUIREMENT = re.compile(r'^-e (?P<link>(?P<vcs>git|svn|hg|bzr).+#egg=(?P<package>.+)-(?P<version>\d(?:\.\d)*))$')
install_requires = []
dependency_links = []
for requirement in (l.strip() for l in open('requirements')):
match = EDITABLE_REQUIREMENT.match(requirement)
if match:
assert which(match.group('vcs')) is not None, \
"VCS '%(vcs)s' must be installed in order to install %(link)s" % match.groupdict()
install_requires.append("%(package)s==%(version)s" % match.groupdict())
dependency_links.append(match.group('link'))
else:
install_requires.append(requirement)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-03 07:55:32
Czy to odpowiada na twoje pytanie?
setup(name='application-xpto',
version='1.0',
author='me,me,me',
author_email='[email protected]',
packages=find_packages(),
include_package_data=True,
description='web app',
install_requires=open('app/requirements.txt').readlines(),
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-18 19:35:47