diff --git a/poetry/packages/locker.py b/poetry/packages/locker.py
index c1cbe6609cb..ad61421a93e 100644
--- a/poetry/packages/locker.py
+++ b/poetry/packages/locker.py
@@ -513,7 +513,25 @@ def _dump_package(self, package: Package) -> dict:
                 dependencies[dependency.pretty_name] = []
 
             constraint = inline_table()
-            constraint["version"] = str(dependency.pretty_constraint)
+
+            if dependency.is_directory() or dependency.is_file():
+                constraint["path"] = dependency.path.as_posix()
+
+                if dependency.is_directory() and dependency.develop:
+                    constraint["develop"] = True
+            elif dependency.is_url():
+                constraint["url"] = dependency.url
+            elif dependency.is_vcs():
+                constraint[dependency.vcs] = dependency.source
+
+                if dependency.branch:
+                    constraint["branch"] = dependency.branch
+                elif dependency.tag:
+                    constraint["tag"] = dependency.tag
+                elif dependency.rev:
+                    constraint["rev"] = dependency.rev
+            else:
+                constraint["version"] = str(dependency.pretty_constraint)
 
             if dependency.extras:
                 constraint["extras"] = sorted(dependency.extras)
@@ -529,7 +547,10 @@ def _dump_package(self, package: Package) -> dict:
         # All the constraints should have the same type,
         # but we want to simplify them if it's possible
         for dependency, constraints in tuple(dependencies.items()):
-            if all(len(constraint) == 1 for constraint in constraints):
+            if all(
+                len(constraint) == 1 and "version" in constraint
+                for constraint in constraints
+            ):
                 dependencies[dependency] = [
                     constraint["version"] for constraint in constraints
                 ]
diff --git a/tests/installation/fixtures/with-directory-dependency-poetry-transitive.test b/tests/installation/fixtures/with-directory-dependency-poetry-transitive.test
index 7177191e2c8..fb10b1accea 100644
--- a/tests/installation/fixtures/with-directory-dependency-poetry-transitive.test
+++ b/tests/installation/fixtures/with-directory-dependency-poetry-transitive.test
@@ -65,8 +65,8 @@ python-versions = "*"
 version = "1.2.3"
 
 [package.dependencies]
-project-with-extras = "1.2.3"
-project-with-transitive-file-dependencies = "1.2.3"
+project-with-extras = { "path" = "../../project_with_extras" }
+project-with-transitive-file-dependencies = { "path" = "../project_with_transitive_file_dependencies" }
 
 [package.source]
 type = "directory"
@@ -82,8 +82,8 @@ python-versions = "*"
 version = "1.2.3"
 
 [package.dependencies]
-demo = "0.1.0"
-inner-directory-project = "1.2.4"
+demo = { "path" = "../../distributions/demo-0.1.0-py2.py3-none-any.whl" }
+inner-directory-project = { "path" = "inner-directory-project" }
 
 [package.source]
 type = "directory"
diff --git a/tests/installation/fixtures/with-file-dependency-transitive.test b/tests/installation/fixtures/with-file-dependency-transitive.test
index 6e5d92d711a..b882f262640 100644
--- a/tests/installation/fixtures/with-file-dependency-transitive.test
+++ b/tests/installation/fixtures/with-file-dependency-transitive.test
@@ -48,8 +48,8 @@ python-versions = "*"
 version = "1.2.3"
 
 [package.dependencies]
-demo = "0.1.0"
-inner-directory-project = "1.2.4"
+demo = { "path" = "../../distributions/demo-0.1.0-py2.py3-none-any.whl" }
+inner-directory-project = { "path" = "inner-directory-project" }
 
 [package.source]
 type = "directory"
diff --git a/tests/packages/test_locker.py b/tests/packages/test_locker.py
index 285b91a8788..ed3c9af411d 100644
--- a/tests/packages/test_locker.py
+++ b/tests/packages/test_locker.py
@@ -1,6 +1,8 @@
 import logging
 import tempfile
 
+from pathlib import Path
+
 import pytest
 import tomlkit
 
@@ -531,3 +533,68 @@ def test_locker_should_neither_emit_warnings_nor_raise_error_for_lower_compatibl
     _ = locker.lock_data
 
     assert 0 == len(caplog.records)
+
+
+def test_locker_dumps_dependency_information_correctly(locker, root):
+    root_dir = Path(__file__).parent.parent.joinpath("fixtures")
+    package_a = get_package("A", "1.0.0")
+    package_a.add_dependency(
+        Factory.create_dependency(
+            "B", {"path": "project_with_extras", "develop": True}, root_dir=root_dir
+        )
+    )
+    package_a.add_dependency(
+        Factory.create_dependency(
+            "C",
+            {"path": "directory/project_with_transitive_directory_dependencies"},
+            root_dir=root_dir,
+        )
+    )
+    package_a.add_dependency(
+        Factory.create_dependency(
+            "D", {"path": "distributions/demo-0.1.0.tar.gz"}, root_dir=root_dir
+        )
+    )
+    package_a.add_dependency(
+        Factory.create_dependency(
+            "E", {"url": "https://python-poetry.org/poetry-1.2.0.tar.gz"}
+        )
+    )
+    package_a.add_dependency(
+        Factory.create_dependency(
+            "F", {"git": "https://github.com/python-poetry/poetry.git", "branch": "foo"}
+        )
+    )
+
+    packages = [package_a]
+
+    locker.set_lock_data(root, packages)
+
+    with locker.lock.open(encoding="utf-8") as f:
+        content = f.read()
+
+    expected = """[[package]]
+name = "A"
+version = "1.0.0"
+description = ""
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+B = {path = "project_with_extras", develop = true}
+C = {path = "directory/project_with_transitive_directory_dependencies"}
+D = {path = "distributions/demo-0.1.0.tar.gz"}
+E = {url = "https://python-poetry.org/poetry-1.2.0.tar.gz"}
+F = {git = "https://github.com/python-poetry/poetry.git", branch = "foo"}
+
+[metadata]
+lock-version = "1.1"
+python-versions = "*"
+content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8"
+
+[metadata.files]
+A = []
+"""
+
+    assert expected == content