Хотя кажется, что это невозможно при использовании PIP, существует обходной путь, который выполняет то же самое. Временное решение: автоматически сгенерировать второй файл требований из исходного файла требований и каталога sdists (который будет использоваться только для этого каталога).
Простая реализация может выглядеть примерно так (сохранить в файле с именем "make_reqs.py"):
#!/usr/bin/env python
import re
import sys
import os.path
pat = '.+#egg=(.+)'
allowed_exts = ['.zip', '.tar.gz', 'tar.bz2']
def find_version(sdists_dir, name):
files = [f for f in os.listdir(sdists_dir) if f.startswith(name)]
if len(files) != 1:
return ''
version = files[0].replace(name+'-', '')
for ext in allowed_exts:
version = version.replace(ext, '')
return version
def get_requirements(file_name, sdists_dir):
out_reqs = ['--find-links file://%s' % os.path.abspath(sdists_dir)]
with open(file_name) as req_file:
reqs = [l.strip() for l in req_file.readlines()]
for req in reqs:
match = re.match(pat, req)
if match and not req.startswith('#'):
name = match.group(1)
version = find_version(sdists_dir, name)
if version:
out_reqs.append('%s==%s' % (name, version))
else:
out_reqs.append(req)
else:
out_reqs.append(req)
return out_reqs
if __name__ == '__main__':
print '\n'.join(get_requirements(*sys.argv[1:]))
Чтобы использовать скрипт, вы должны сделать что-то вроде этого:
python make_reqs.py requirements.txt /path/to/sdists > sdist_reqs.txt
pip install --no-index -r sdist_reqs.txt