diff --git a/cabal-install/src/Distribution/Client/CmdInstall.hs b/cabal-install/src/Distribution/Client/CmdInstall.hs
index 097a5488cccede2940b4b0bb882964a0cb6f9846..be4f66363d42d5dfccf3c85492f488709237cd83 100644
--- a/cabal-install/src/Distribution/Client/CmdInstall.hs
+++ b/cabal-install/src/Distribution/Client/CmdInstall.hs
@@ -470,8 +470,7 @@ installAction flags@NixStyleFlags{extraFlags, configFlags, installFlags, project
 
     -- check for targets already in env
     let getPackageName :: PackageSpecifier UnresolvedSourcePackage -> PackageName
-        getPackageName (NamedPackage pn _) = pn
-        getPackageName (SpecificSourcePackage (SourcePackage pkgId _ _ _)) = pkgName pkgId
+        getPackageName = pkgSpecifierTarget
         targetNames = S.fromList $ map getPackageName (pkgSpecs ++ uriSpecs)
         envNames = S.fromList $ map getPackageName envSpecs
         forceInstall = fromFlagOrDefault False $ installOverrideReinstall installFlags
@@ -571,7 +570,7 @@ withProject verbosity cliConfig targetStrings installLibs = do
     if null unresolvedTargetStrings
       then return (parsedPkgSpecs, parsedTargets)
       else do
-        -- Anything that could not be parsed as a packageId (e.g. a pacakge name with not version or
+        -- Anything that could not be parsed as a packageId (e.g. a package name without a version or
         -- a target syntax using colons) must be resolved inside the project context.
         (resolvedPkgSpecs, resolvedTargets) <-
           resolveTargetSelectorsInProjectBaseContext verbosity baseCtx unresolvedTargetStrings targetFilter
@@ -580,7 +579,7 @@ withProject verbosity cliConfig targetStrings installLibs = do
   -- Apply the local configuration (e.g. cli flags) to all direct targets of install command, see note
   -- in 'installAction'.
   --
-  -- NOTE: If a target string had to be resolved inside the project conterxt, then pkgSpecs will include
+  -- NOTE: If a target string had to be resolved inside the project context, then pkgSpecs will include
   -- the project packages turned into source distributions (getSpecsAndTargetSelectors does this).
   -- We want to apply the local configuration only to the actual targets.
   let config =
@@ -797,7 +796,16 @@ getSpecsAndTargetSelectors verbosity reducedVerbosity sourcePkgDb targetSelector
           TarGzArchive
           (distSdistFile distDirLayout (packageId pkg))
           pkg
-      NamedPackage pkgName _ -> error $ "Got NamedPackage " ++ prettyShow pkgName
+      NamedPackage _ _ ->
+        -- This may happen if 'extra-packages' are listed in the project file.
+        -- We don't need to do extra work for NamedPackages since they will be
+        -- fetched from Hackage rather than locally 'sdistize'-d. Note how,
+        -- below, we already return the local 'sdistize'-d packages together
+        -- with the 'hackagePkgs' (which are 'NamedPackage's), and that
+        -- 'sdistize' is a no-op for 'NamedPackages', meaning the
+        -- 'NamedPackage's in 'localPkgs' will be treated just like
+        -- 'hackagePkgs' as they should.
+        pure ()
 
     if null targetsMap
       then return (hackagePkgs, hackageTargets)
diff --git a/cabal-testsuite/PackageTests/Install/T8848/Main.hs b/cabal-testsuite/PackageTests/Install/T8848/Main.hs
new file mode 100644
index 0000000000000000000000000000000000000000..76a9bdb5d48831da2e59c811ecbcbb5a379bdfb5
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Install/T8848/Main.hs
@@ -0,0 +1 @@
+main = pure ()
diff --git a/cabal-testsuite/PackageTests/Install/T8848/cabal.project b/cabal-testsuite/PackageTests/Install/T8848/cabal.project
new file mode 100644
index 0000000000000000000000000000000000000000..ac8175d95e0ce52f4c4edc167feae92f1fbebde0
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Install/T8848/cabal.project
@@ -0,0 +1,2 @@
+packages: .
+extra-packages: containers
diff --git a/cabal-testsuite/PackageTests/Install/T8848/cabal.test.hs b/cabal-testsuite/PackageTests/Install/T8848/cabal.test.hs
new file mode 100644
index 0000000000000000000000000000000000000000..000662fd82b764b4c9b968909a8ea1b4a2cd267e
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Install/T8848/cabal.test.hs
@@ -0,0 +1,6 @@
+import Test.Cabal.Prelude
+
+main = cabalTest $ do
+  recordMode DoNotRecord $
+    cabal' "install" ["t8848"]
+      >>= assertOutputContains "Wrote tarball sdist to"
diff --git a/cabal-testsuite/PackageTests/Install/T8848/t8848.cabal b/cabal-testsuite/PackageTests/Install/T8848/t8848.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..df445b7d99df7d8bbc2f71b9d5eca2cc810baaf3
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Install/T8848/t8848.cabal
@@ -0,0 +1,8 @@
+name: t8848
+version: 1.0
+build-type: Simple
+cabal-version: >= 1.2
+
+executable t8848
+  main-is: Main.hs
+  build-depends: base