{"action":"created","comment":{"url":"https://api.github.com/repos/pypa/interoperability-peps/pulls/comments/44116956","id":44116956,"diff_hunk":"@@ -0,0 +1,368 @@\n+:PEP: XX\n+:Title: Dependency specification for Python Software Packages\n+:Version: $Revision$\n+:Last-Modified: $Date$\n+:Author: Robert Collins <rbtcollins@hp.com>\n+BDFL-Delegate: Donald Stufft <donald@stufft.io>\n+:Discussions-To: distutils-sig <distutils-sig@python.org>\n+:Status: Draft\n+:Type: Standards Track\n+:Content-Type: text/x-rst\n+:Created: 11-Nov-2015\n+:Post-History: XX\n+\n+\n+Abstract\n+========\n+\n+This PEP specifies the language used to describe dependencies for packages.\n+It draws a border at the edge of describing a single dependency - the\n+different sorts of dependencies and when they should be installed is a higher\n+level problem. The intent is provide a building block for higher layer\n+specifications.\n+\n+The job of a dependency is to enable tools like pip [#pip]_ to find the right\n+package to install. Sometimes this is very loose - just specifying a name, and\n+sometimes very specific - referring to a specific file to install. Sometimes\n+dependencies are only relevant in one platform, or only some versions are\n+acceptable, so the language permits describing all these cases.\n+\n+The language defined is a compact line based format which is already in\n+widespread use in pip requirements files, though we do not specify the command\n+line option handling that those files permit. There is one caveat - the\n+URL reference form, specified in PEP-440 [#pep440]_ is not actually\n+implemented in pip, but since PEP-440 is accepted, we use that format rather\n+than pip's current native format.\n+\n+Motivation\n+==========\n+\n+Any specification in the Python packaging ecosystem that needs to consume\n+lists of dependencies needs to build on an approved PEP for such, but \n+PEP-426 [#pep426]_ is mostly aspirational - and there are already existing\n+implementations of the dependency specification which we can instead adopt.\n+The existing implementations are battle proven and user friendly, so adopting\n+them is arguably much better than approving an aspirational, unconsumed, format.\n+\n+Specification\n+=============\n+\n+Examples\n+--------\n+\n+All features of the language shown with a name based lookup::\n+\n+    requests \\\n+        [security] >= 2.8.1, == 2.8.* \\\n+        ; python_version < \"2.7.10\" \\\n+        # Fix HTTPS on older Python versions.\n+\n+A minimal URL based lookup::\n+\n+    pip @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686\n+\n+Concepts\n+--------\n+\n+A dependency specification always specifies a distribution name. It may\n+include extras, which expand the dependencies of the named distribution to\n+enable optional features. The version installed can be controlled using\n+version limits, or giving the URL to a specific artifact to install. Finally\n+the dependency can be made conditional using environment markers.\n+\n+Grammar\n+-------\n+\n+We first cover the grammar briefly and the drill into the semantics of each","path":"dependency-specification.rst","position":76,"original_position":76,"commit_id":"e99039160bf7ff0b48809bca01a75a2dea64e4cb","original_commit_id":"e99039160bf7ff0b48809bca01a75a2dea64e4cb","user":{"login":"xavfernandez","id":1089744,"avatar_url":"https://avatars.githubusercontent.com/u/1089744?v=3","gravatar_id":"","url":"https://api.github.com/users/xavfernandez","html_url":"https://github.com/xavfernandez","followers_url":"https://api.github.com/users/xavfernandez/followers","following_url":"https://api.github.com/users/xavfernandez/following{/other_user}","gists_url":"https://api.github.com/users/xavfernandez/gists{/gist_id}","starred_url":"https://api.github.com/users/xavfernandez/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xavfernandez/subscriptions","organizations_url":"https://api.github.com/users/xavfernandez/orgs","repos_url":"https://api.github.com/users/xavfernandez/repos","events_url":"https://api.github.com/users/xavfernandez/events{/privacy}","received_events_url":"https://api.github.com/users/xavfernandez/received_events","type":"User","site_admin":false},"body":"the drill -> then drill ?","created_at":"2015-11-06T09:13:13Z","updated_at":"2015-11-06T09:13:13Z","html_url":"https://github.com/pypa/interoperability-peps/pull/56#discussion_r44116956","pull_request_url":"https://api.github.com/repos/pypa/interoperability-peps/pulls/56","_links":{"self":{"href":"https://api.github.com/repos/pypa/interoperability-peps/pulls/comments/44116956"},"html":{"href":"https://github.com/pypa/interoperability-peps/pull/56#discussion_r44116956"},"pull_request":{"href":"https://api.github.com/repos/pypa/interoperability-peps/pulls/56"}}},"pull_request":{"url":"https://api.github.com/repos/pypa/interoperability-peps/pulls/56","id":49912435,"html_url":"https://github.com/pypa/interoperability-peps/pull/56","diff_url":"https://github.com/pypa/interoperability-peps/pull/56.diff","patch_url":"https://github.com/pypa/interoperability-peps/pull/56.patch","issue_url":"https://api.github.com/repos/pypa/interoperability-peps/issues/56","number":56,"state":"open","locked":false,"title":"Define dependency specifications formally.","user":{"login":"rbtcollins","id":499678,"avatar_url":"https://avatars.githubusercontent.com/u/499678?v=3","gravatar_id":"","url":"https://api.github.com/users/rbtcollins","html_url":"https://github.com/rbtcollins","followers_url":"https://api.github.com/users/rbtcollins/followers","following_url":"https://api.github.com/users/rbtcollins/following{/other_user}","gists_url":"https://api.github.com/users/rbtcollins/gists{/gist_id}","starred_url":"https://api.github.com/users/rbtcollins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rbtcollins/subscriptions","organizations_url":"https://api.github.com/users/rbtcollins/orgs","repos_url":"https://api.github.com/users/rbtcollins/repos","events_url":"https://api.github.com/users/rbtcollins/events{/privacy}","received_events_url":"https://api.github.com/users/rbtcollins/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-11-06T03:28:26Z","updated_at":"2015-11-06T09:13:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9feae38d54f340edc3f30af983ffef4a38000f66","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/pypa/interoperability-peps/pulls/56/commits","review_comments_url":"https://api.github.com/repos/pypa/interoperability-peps/pulls/56/comments","review_comment_url":"https://api.github.com/repos/pypa/interoperability-peps/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pypa/interoperability-peps/issues/56/comments","statuses_url":"https://api.github.com/repos/pypa/interoperability-peps/statuses/e99039160bf7ff0b48809bca01a75a2dea64e4cb","head":{"label":"rbtcollins:dependency","ref":"dependency","sha":"e99039160bf7ff0b48809bca01a75a2dea64e4cb","user":{"login":"rbtcollins","id":499678,"avatar_url":"https://avatars.githubusercontent.com/u/499678?v=3","gravatar_id":"","url":"https://api.github.com/users/rbtcollins","html_url":"https://github.com/rbtcollins","followers_url":"https://api.github.com/users/rbtcollins/followers","following_url":"https://api.github.com/users/rbtcollins/following{/other_user}","gists_url":"https://api.github.com/users/rbtcollins/gists{/gist_id}","starred_url":"https://api.github.com/users/rbtcollins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rbtcollins/subscriptions","organizations_url":"https://api.github.com/users/rbtcollins/orgs","repos_url":"https://api.github.com/users/rbtcollins/repos","events_url":"https://api.github.com/users/rbtcollins/events{/privacy}","received_events_url":"https://api.github.com/users/rbtcollins/received_events","type":"User","site_admin":false},"repo":{"id":40106828,"name":"interoperability-peps","full_name":"rbtcollins/interoperability-peps","owner":{"login":"rbtcollins","id":499678,"avatar_url":"https://avatars.githubusercontent.com/u/499678?v=3","gravatar_id":"","url":"https://api.github.com/users/rbtcollins","html_url":"https://github.com/rbtcollins","followers_url":"https://api.github.com/users/rbtcollins/followers","following_url":"https://api.github.com/users/rbtcollins/following{/other_user}","gists_url":"https://api.github.com/users/rbtcollins/gists{/gist_id}","starred_url":"https://api.github.com/users/rbtcollins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rbtcollins/subscriptions","organizations_url":"https://api.github.com/users/rbtcollins/orgs","repos_url":"https://api.github.com/users/rbtcollins/repos","events_url":"https://api.github.com/users/rbtcollins/events{/privacy}","received_events_url":"https://api.github.com/users/rbtcollins/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rbtcollins/interoperability-peps","description":"Development repo for evolution of PyPA interoperability standards (released versions are published as PEPs on python.org)","fork":true,"url":"https://api.github.com/repos/rbtcollins/interoperability-peps","forks_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/forks","keys_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/teams","hooks_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/hooks","issue_events_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/issues/events{/number}","events_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/events","assignees_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/assignees{/user}","branches_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/branches{/branch}","tags_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/tags","blobs_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/git/refs{/sha}","trees_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/statuses/{sha}","languages_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/languages","stargazers_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/stargazers","contributors_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/contributors","subscribers_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/subscribers","subscription_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/subscription","commits_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/commits{/sha}","git_commits_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/git/commits{/sha}","comments_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/comments{/number}","issue_comment_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/issues/comments{/number}","contents_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/contents/{+path}","compare_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/merges","archive_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/downloads","issues_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/issues{/number}","pulls_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/pulls{/number}","milestones_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/milestones{/number}","notifications_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/labels{/name}","releases_url":"https://api.github.com/repos/rbtcollins/interoperability-peps/releases{/id}","created_at":"2015-08-03T05:36:56Z","updated_at":"2015-08-03T05:36:56Z","pushed_at":"2015-11-06T03:28:17Z","git_url":"git://github.com/rbtcollins/interoperability-peps.git","ssh_url":"git@github.com:rbtcollins/interoperability-peps.git","clone_url":"https://github.com/rbtcollins/interoperability-peps.git","svn_url":"https://github.com/rbtcollins/interoperability-peps","homepage":null,"size":24622,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"pypa:master","ref":"master","sha":"1dc2bd0c73df9546a0e3494343d4fd1eaccda8a8","user":{"login":"pypa","id":647025,"avatar_url":"https://avatars.githubusercontent.com/u/647025?v=3","gravatar_id":"","url":"https://api.github.com/users/pypa","html_url":"https://github.com/pypa","followers_url":"https://api.github.com/users/pypa/followers","following_url":"https://api.github.com/users/pypa/following{/other_user}","gists_url":"https://api.github.com/users/pypa/gists{/gist_id}","starred_url":"https://api.github.com/users/pypa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pypa/subscriptions","organizations_url":"https://api.github.com/users/pypa/orgs","repos_url":"https://api.github.com/users/pypa/repos","events_url":"https://api.github.com/users/pypa/events{/privacy}","received_events_url":"https://api.github.com/users/pypa/received_events","type":"Organization","site_admin":false},"repo":{"id":28580365,"name":"interoperability-peps","full_name":"pypa/interoperability-peps","owner":{"login":"pypa","id":647025,"avatar_url":"https://avatars.githubusercontent.com/u/647025?v=3","gravatar_id":"","url":"https://api.github.com/users/pypa","html_url":"https://github.com/pypa","followers_url":"https://api.github.com/users/pypa/followers","following_url":"https://api.github.com/users/pypa/following{/other_user}","gists_url":"https://api.github.com/users/pypa/gists{/gist_id}","starred_url":"https://api.github.com/users/pypa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pypa/subscriptions","organizations_url":"https://api.github.com/users/pypa/orgs","repos_url":"https://api.github.com/users/pypa/repos","events_url":"https://api.github.com/users/pypa/events{/privacy}","received_events_url":"https://api.github.com/users/pypa/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pypa/interoperability-peps","description":"Development repo for evolution of PyPA interoperability standards (released versions are published as PEPs on python.org)","fork":false,"url":"https://api.github.com/repos/pypa/interoperability-peps","forks_url":"https://api.github.com/repos/pypa/interoperability-peps/forks","keys_url":"https://api.github.com/repos/pypa/interoperability-peps/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pypa/interoperability-peps/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pypa/interoperability-peps/teams","hooks_url":"https://api.github.com/repos/pypa/interoperability-peps/hooks","issue_events_url":"https://api.github.com/repos/pypa/interoperability-peps/issues/events{/number}","events_url":"https://api.github.com/repos/pypa/interoperability-peps/events","assignees_url":"https://api.github.com/repos/pypa/interoperability-peps/assignees{/user}","branches_url":"https://api.github.com/repos/pypa/interoperability-peps/branches{/branch}","tags_url":"https://api.github.com/repos/pypa/interoperability-peps/tags","blobs_url":"https://api.github.com/repos/pypa/interoperability-peps/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pypa/interoperability-peps/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pypa/interoperability-peps/git/refs{/sha}","trees_url":"https://api.github.com/repos/pypa/interoperability-peps/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pypa/interoperability-peps/statuses/{sha}","languages_url":"https://api.github.com/repos/pypa/interoperability-peps/languages","stargazers_url":"https://api.github.com/repos/pypa/interoperability-peps/stargazers","contributors_url":"https://api.github.com/repos/pypa/interoperability-peps/contributors","subscribers_url":"https://api.github.com/repos/pypa/interoperability-peps/subscribers","subscription_url":"https://api.github.com/repos/pypa/interoperability-peps/subscription","commits_url":"https://api.github.com/repos/pypa/interoperability-peps/commits{/sha}","git_commits_url":"https://api.github.com/repos/pypa/interoperability-peps/git/commits{/sha}","comments_url":"https://api.github.com/repos/pypa/interoperability-peps/comments{/number}","issue_comment_url":"https://api.github.com/repos/pypa/interoperability-peps/issues/comments{/number}","contents_url":"https://api.github.com/repos/pypa/interoperability-peps/contents/{+path}","compare_url":"https://api.github.com/repos/pypa/interoperability-peps/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pypa/interoperability-peps/merges","archive_url":"https://api.github.com/repos/pypa/interoperability-peps/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pypa/interoperability-peps/downloads","issues_url":"https://api.github.com/repos/pypa/interoperability-peps/issues{/number}","pulls_url":"https://api.github.com/repos/pypa/interoperability-peps/pulls{/number}","milestones_url":"https://api.github.com/repos/pypa/interoperability-peps/milestones{/number}","notifications_url":"https://api.github.com/repos/pypa/interoperability-peps/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pypa/interoperability-peps/labels{/name}","releases_url":"https://api.github.com/repos/pypa/interoperability-peps/releases{/id}","created_at":"2014-12-29T04:35:09Z","updated_at":"2015-10-28T19:04:51Z","pushed_at":"2015-11-06T03:28:27Z","git_url":"git://github.com/pypa/interoperability-peps.git","ssh_url":"git@github.com:pypa/interoperability-peps.git","clone_url":"https://github.com/pypa/interoperability-peps.git","svn_url":"https://github.com/pypa/interoperability-peps","homepage":null,"size":24905,"stargazers_count":6,"watchers_count":6,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":32,"forks":7,"open_issues":32,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pypa/interoperability-peps/pulls/56"},"html":{"href":"https://github.com/pypa/interoperability-peps/pull/56"},"issue":{"href":"https://api.github.com/repos/pypa/interoperability-peps/issues/56"},"comments":{"href":"https://api.github.com/repos/pypa/interoperability-peps/issues/56/comments"},"review_comments":{"href":"https://api.github.com/repos/pypa/interoperability-peps/pulls/56/comments"},"review_comment":{"href":"https://api.github.com/repos/pypa/interoperability-peps/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pypa/interoperability-peps/pulls/56/commits"},"statuses":{"href":"https://api.github.com/repos/pypa/interoperability-peps/statuses/e99039160bf7ff0b48809bca01a75a2dea64e4cb"}}}}