Pip freeze не показывает пути репозитория для файла требований
Я создал среду и добавил пакет django-paramfield через git:
$ pip install git+https://bitbucket.org/DataGreed/django-paramfield.git
Downloading/unpacking git+https://bitbucket.org/DataGreed/django-paramfield.git
Cloning https://bitbucket.org/DataGreed/django-paramfield.git to /var/folders/9Z/9ZQZ1Q3WGMOW+JguzcBKNU+++TI/-Tmp-/pip-49Eokm-build
Unpacking objects: 100% (29/29), done.
Running setup.py egg_info for package from git+https://bitbucket.org/DataGreed/django-paramfield.git
Installing collected packages: paramfield
Running setup.py install for paramfield
Successfully installed paramfield
Cleaning up...
но когда я хочу создать файл требования, я вижу только имя пакета:
$ pip freeze
paramfield==0.1
wsgiref==0.1.2
как я могу заставить его вывести всю строку git+https://bitbucket.org/DataGreed/django-paramfield.git
вместо имени пакета? Пакет не в PyPi.
UPD: возможно, это как-то связано с setup.py? Должен ли я как-то изменить его, чтобы отразить РЕПО URL-адрес?
UPD2: я нашел довольно похожий вопрос в stackoverflow, но автор не был уверен, как ему удалось решить проблему, и принятый ответ, К сожалению, не дает хорошего намека, хотя, судя по комментарию автора, это имеет какое-то отношение к setup.py файл.
UPD3: я пытался передать download_url
in setup.py и установка пакета через pip с этим url, но он проблема сохраняется.
3 ответов
простым, но рабочим обходным путем было бы установить пакет с -e
флаг как pip install -e git+https://bitbucket.org/DataGreed/django-paramfield.git#egg=django-paramfield
.
затем pip freeze
показывает полный исходный путь пакета. Это не лучший способ, которым он должен быть исправлен в pip, но он работает. Обмен -e
(флаг редактирования) - это то, что pip клонирует репозиторий git/hg в /path/to/venv/src/packagename
и работать python setup.py deploy
вместо того, чтобы клонировать его в temp dir и запустить python setup.py install
и удалите temp dir после настройки пакета.
вот скрипт, который сделает это:
#!/usr/bin/env python
from subprocess import check_output
from pkg_resources import get_distribution
def download_url(package):
dist = get_distribution(package)
for line in dist._get_metadata('PKG-INFO'):
if line.startswith('Download-URL:'):
return line.split(':', 1)[1]
def main(argv=None):
import sys
from argparse import ArgumentParser
argv = argv or sys.argv
parser = ArgumentParser(
description='show download urls for installed packages')
parser.parse_args(argv[1:])
for package in check_output(['pip', 'freeze']).splitlines():
print('{}: {}'.format(package, download_url(package) or 'UNKNOWN'))
if __name__ == '__main__':
main()
Это старый вопрос, но я только что проработал эту же проблему и разрешение Просто добавьте путь к РЕПО (git в моем случае) к требованиям fie вместо имени пакета
то есть
...
celery==3.0.19
# chunkdata isn't available on PyPi
https://github.com/aaronmccall/chunkdata/zipball/master
distribute==0.6.34
...
работал как шарм deplying на Heroku