Як констатувати у вимовах.txt пряме джерело github


448

Я встановив бібліотеку за допомогою команди

pip install git+git://github.com/mozilla/elasticutils.git

який встановлює його безпосередньо з сховища Github. Це прекрасно працює, і я хочу мати цю залежність у своєму requirements.txt. Я подивився на квитки , як це , але це не вирішити мою проблему. Якщо я поставлю щось подібне

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

у requirements.txtфайлі, виходить pip install -r requirements.txtтакий результат:

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

Документації файлу вимог не кажучи вже посилання з допомогою git+gitспецифікатор протоколу, так що, може бути , це просто не підтримується.

Хтось має рішення для моєї проблеми?

Відповіді:


327

Синтаксис "редагованих" пакетів може використовуватися requirements.txtдля імпортування пакетів з різних VCS (git, hg, bzr, svn) :

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

Крім того, можна вказати на певний вчинок:

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils

3
Мені не вдалося перевірити локально таку редаговану версію (мабуть, через проблеми із синтаксисом), і тому я в кінцевому підсумку використовував git+gitваріант (який працював). У requirements.txtвашій версії працює, тому дуже дякую :)
Alfe

1
docsПосилання не працює для мене; Я використав старіший .
osa

42
Що я не зрозумів, це те, що показаний синтаксис - це саме те, що відповідає вимогам, тобто немає імені пакета перед -e.
шавлія

5
Додавання "-e" не потрібно залежно від того, чи хочете ви, щоб пакет знаходився в режимі редагування, див. Відповідь від @qff.
Небо

17
Чи не повинно бути -e git+git://замість цього -e git://? У мене з'явилося повідомлення про помилку "має бути або шлях до локального проекту, або URL-адреса VCS, що починається з svn +, git +, hg + або bzr +" .
Брюс Уейн

424

Зазвичай ваш requirements.txtфайл виглядатиме приблизно так:

package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...

Щоб вказати рето Github, вам package-name==конвенція не потрібна .

Наведені нижче приклади оновлюються package-twoза допомогою репо GitHub. Текст між @та #позначає специфіку пакету.

Вкажіть хеш-комісію ( 41b95ecу контексті оновленого requirements.txt):

package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1

Вкажіть назву філії ( master):

git+git://github.com/path/to/package-two@master#egg=package-two

Вкажіть тег ( 0.1):

git+git://github.com/path/to/package-two@0.1#egg=package-two

Вкажіть реліз ( 3.7.1):

git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two

Зауважте, що #egg=package-twoце не коментар, це чітко вказати назву пакета

У цій публікації в блозі є ще кілька обговорень на цю тему.


54
З усіх інших відповідей, я не можу повірити, що жоден із них просто не показав файл вимог із сумішшю "нормальних" запитань з git, кинутим для порівняння. Мене так відкинуло те, що було схоже на параметри командного рядка ( -e). Дякуємо, що показали суміш обох, щоб я міг поставити це в контексті!
Генді

Вказівка ​​на реліз 3.7.1зі git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-twoмною не спрацювала. Що для мене працювало git+git://github.com/path/to/package-two@3.7.1#egg=package-two.
Жан Пол

Ця відповідь була дуже корисною. Однак одне. Ці git+git://...позначення якимось чином спричинили відношення ssh-помилок у моєму вікні Linux. Тож я закінчив перемикати їх на git+https://...нотацію, і тоді вони прекрасно працюють.
RayLuo

174

requirements.txtдозволяє наступні способи визначення залежності від пакета у сховищі git, починаючи з pip 7.0: 1

[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject

Для Github це означає, що ви можете зробити (помітити пропущене -e):

git+git://github.com/mozilla/elasticutils.git#egg=elasticutils

Чому зайва відповідь?
Я дещо плутав -eпрапор у інших відповідях, ось ось моє уточнення:

-eАбо --editableпрапор означає , що пакет встановлений в <venv path>/src/SomeProjectі , таким чином , не в глибоко під землею <venv path>/lib/pythonX.X/site-packages/SomeProjectбуло б в іншому випадку бути поміщені в. 2

Документація


9
Але зауважте, що якщо ви пропустите -eнаступний, pip freezeможливо, не дасте правильних результатів для цього пакету
Maccesch

82

По- перше, встановити з git+gitабо git+https, в будь-якому випадку ви знаєте. Приклад встановлення kronokгілки brabeionпроекту:

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

По-друге, використовуйте pip freeze > requirements.txtдля отримання потрібної речі у вашому requirements.txt. У цьому випадку ви отримаєте

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

По-третє, перевірити результат:

pip uninstall brabeion
pip install -r requirements.txt

4
pip freeze все ще перераховує пакет, який я використовую як закриту, передню версію. а не прямий замовлення github
Антуан Клавал

4
Вам потрібно скористатися опцією `-e 'для' pip freeze ', щоб створити URL-адресу
Janusz Skonieczny

2
піп 9.0.1:no such option: -e
sds

Ви маєте на увазі git+https? У тексті, який ви говорите, git+gitі в кодіgit+https
Ентоні Хеткінс

@AntonyHatchkins виправлено.
оса

17

Оскільки pip v1.5(випущено 1 січня 2014 року: CHANGELOG , PR ) ви також можете вказати підкаталог gpo repo, який містить ваш модуль. Синтаксис виглядає приблизно так:

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

Примітка. Як автор модуля для піп-програм, в ідеалі ви, можливо, хочете опублікувати свій модуль у власному репо-версі верхнього рівня, якщо можете. Однак ця функція корисна для деяких раніше існуючих репостів, що містять модулі python у підкаталогах. Ви можете змусити їх встановити таким чином, якщо вони також не публікуються для pypi.


1

Я знаходжу, що складно отримати pip3 (v9.0.1, встановлений менеджером пакунків Ubuntu 18.04), щоб він фактично встановив те, про що я йому говорю встановити. Я публікую цю відповідь, щоб заощадити час, хто стикається з цією проблемою.

Не вдалося вставити це у файл вимоги.txt:

git+git://github.com/myname/myrepo.git@my-branch#egg=eggname

Під "провалом" я маю на увазі, що, завантажуючи код з Git, він в кінцевому підсумку встановив оригінальну версію коду, як знайдено на PyPi, замість коду в репо на цій гілці.

Однак установка комітету замість назви гілки працює:

git+git://github.com/myname/myrepo.git@d27d07c9e862feb939e56d0df19d5733ea7b4f4d#egg=eggname

Ви впевнені, що ваше відділення також віддалене?
Альфа

Це не вказувало на локальну копію, якщо це те, що вам цікаво.
Викиньте рахунок
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.