diff --git a/README.md b/README.md
index 10cdbe39..1ca5965f 100644
--- a/README.md
+++ b/README.md
@@ -458,6 +458,7 @@ source_path = [
   - `:zip [source] [destination]` is a special command which creates content of current working directory (first argument) and places it inside of path (second argument).
 - `pip_requirements` - Controls whether to execute `pip install`. Set to `false` to disable this feature, `true` to run `pip install` with `requirements.txt` found in `path`. Or set to another filename which you want to use instead. When `source_path` is passed as a string containing a path (and not a list of maps), and `requirements.txt` is present, `pip install` is automatically executed.
 - `pip_tmp_dir` - Set the base directory to make the temporary directory for pip installs. Can be useful for Docker in Docker builds.
+- `pip_install_extra_args` - A list of additional pip arguments to add to the pip install command
 - `poetry_install` - Controls whether to execute `poetry export` and `pip install`. Set to `false` to disable this feature, `true` to run `poetry export` with `pyproject.toml` and `poetry.lock` found in `path`. When `source_path` is passed as a string containing a path (and not a list of maps), and `pyproject.toml` with a build system `poetry` is present, `poetry export` and `pip install` are automatically executed.
 - `poetry_export_extra_args` - A list of additional poetry arguments to add to the poetry export command
 - `npm_requirements` - Controls whether to execute `npm install`. Set to `false` to disable this feature, `true` to run `npm install` with `package.json` found in `path`. Or set to another filename which you want to use instead.
diff --git a/package.py b/package.py
index 6e19846c..1d1c3541 100644
--- a/package.py
+++ b/package.py
@@ -687,7 +687,9 @@ def step(*x):
         def hash(path):
             source_paths.append(path)
 
-        def pip_requirements_step(path, prefix=None, required=False, tmp_dir=None):
+        def pip_requirements_step(
+            path, prefix=None, required=False, tmp_dir=None, pip_install_extra_args=[]
+        ):
             command = runtime
             requirements = path
             if os.path.isdir(path):
@@ -703,11 +705,23 @@ def pip_requirements_step(path, prefix=None, required=False, tmp_dir=None):
                         "available in system PATH".format(command)
                     )
 
-                step("pip", runtime, requirements, prefix, tmp_dir)
+                step(
+                    "pip",
+                    runtime,
+                    requirements,
+                    prefix,
+                    tmp_dir,
+                    pip_install_extra_args,
+                )
                 hash(requirements)
 
         def poetry_install_step(
-            path, poetry_export_extra_args=[], prefix=None, required=False, tmp_dir=None
+            path,
+            poetry_export_extra_args=[],
+            prefix=None,
+            required=False,
+            tmp_dir=None,
+            pip_install_extra_args=[],
         ):
             pyproject_file = path
             if os.path.isdir(path):
@@ -718,7 +732,15 @@ def poetry_install_step(
                         "poetry configuration not found: {}".format(pyproject_file)
                     )
             else:
-                step("poetry", runtime, path, poetry_export_extra_args, prefix, tmp_dir)
+                step(
+                    "poetry",
+                    runtime,
+                    path,
+                    poetry_export_extra_args,
+                    prefix,
+                    tmp_dir,
+                    pip_install_extra_args,
+                )
                 hash(pyproject_file)
                 pyproject_path = os.path.dirname(pyproject_file)
                 poetry_lock_file = os.path.join(pyproject_path, "poetry.lock")
@@ -819,6 +841,7 @@ def commands_step(path, commands):
                 else:
                     prefix = claim.get("prefix_in_zip")
                     pip_requirements = claim.get("pip_requirements")
+                    pip_install_extra_args = claim.get("pip_install_extra_args", [])
                     poetry_install = claim.get("poetry_install")
                     poetry_export_extra_args = claim.get("poetry_export_extra_args", [])
                     npm_requirements = claim.get(
@@ -833,6 +856,7 @@ def commands_step(path, commands):
                                 prefix,
                                 required=True,
                                 tmp_dir=claim.get("pip_tmp_dir"),
+                                pip_install_extra_args=pip_install_extra_args,
                             )
                         else:
                             pip_requirements_step(
@@ -840,6 +864,7 @@ def commands_step(path, commands):
                                 prefix,
                                 required=True,
                                 tmp_dir=claim.get("pip_tmp_dir"),
+                                pip_install_extra_args=pip_install_extra_args,
                             )
 
                     if poetry_install and runtime.startswith("python"):
@@ -850,6 +875,7 @@ def commands_step(path, commands):
                                 poetry_export_extra_args=poetry_export_extra_args,
                                 required=True,
                                 tmp_dir=claim.get("poetry_tmp_dir"),
+                                pip_install_extra_args=pip_install_extra_args,
                             )
 
                     if npm_requirements and runtime.startswith("nodejs"):
@@ -937,9 +963,15 @@ def execute(self, build_plan, zip_stream, query):
                     else:
                         zs.write_file(source_path, prefix=prefix, timestamp=ts)
                 elif cmd == "pip":
-                    runtime, pip_requirements, prefix, tmp_dir = action[1:]
+                    (
+                        runtime,
+                        pip_requirements,
+                        prefix,
+                        tmp_dir,
+                        pip_install_extra_args,
+                    ) = action[1:]
                     with install_pip_requirements(
-                        query, pip_requirements, tmp_dir
+                        query, pip_requirements, tmp_dir, pip_install_extra_args
                     ) as rd:
                         if rd:
                             if pf:
@@ -950,12 +982,21 @@ def execute(self, build_plan, zip_stream, query):
                                 # XXX: timestamp=0 - what actually do with it?
                                 zs.write_dirs(rd, prefix=prefix, timestamp=0)
                 elif cmd == "poetry":
-                    (runtime, path, poetry_export_extra_args, prefix, tmp_dir) = action[
-                        1:
-                    ]
+                    (
+                        runtime,
+                        path,
+                        poetry_export_extra_args,
+                        prefix,
+                        tmp_dir,
+                        pip_install_extra_args,
+                    ) = action[1:]
                     log.info("poetry_export_extra_args: %s", poetry_export_extra_args)
                     with install_poetry_dependencies(
-                        query, path, poetry_export_extra_args, tmp_dir
+                        query,
+                        path,
+                        poetry_export_extra_args,
+                        tmp_dir,
+                        pip_install_extra_args,
                     ) as rd:
                         if rd:
                             if pf:
@@ -1048,7 +1089,7 @@ def _zip_write_with_filter(
 
 
 @contextmanager
-def install_pip_requirements(query, requirements_file, tmp_dir):
+def install_pip_requirements(query, requirements_file, tmp_dir, pip_install_extra_args):
     # TODO:
     #  1. Emit files instead of temp_dir
 
@@ -1125,7 +1166,7 @@ def install_pip_requirements(query, requirements_file, tmp_dir):
                 "--prefix=",
                 "--target=.",
                 "--requirement={}".format(requirements_filename),
-            ]
+            ] + pip_install_extra_args
             if docker:
                 with_ssh_agent = docker.with_ssh_agent
                 pip_cache_dir = docker.docker_pip_cache
@@ -1175,7 +1216,9 @@ def install_pip_requirements(query, requirements_file, tmp_dir):
 
 
 @contextmanager
-def install_poetry_dependencies(query, path, poetry_export_extra_args, tmp_dir):
+def install_poetry_dependencies(
+    query, path, poetry_export_extra_args, tmp_dir, pip_install_extra_args
+):
     # TODO:
     #  1. Emit files instead of temp_dir
 
@@ -1301,7 +1344,8 @@ def copy_file_to_target(file, temp_dir):
                     "--prefix=",
                     "--target=.",
                     "--requirement=requirements.txt",
-                ],
+                ]
+                + pip_install_extra_args,
             ]
             if docker:
                 with_ssh_agent = docker.with_ssh_agent