diff --git a/lib/modules/manager/poetry/artifacts.spec.ts b/lib/modules/manager/poetry/artifacts.spec.ts
index 4af0295f499938f889a4cc0fc01c1faef5e64660..7ca281a043d5ccd8aa3620566a1982f4bfeed648 100644
--- a/lib/modules/manager/poetry/artifacts.spec.ts
+++ b/lib/modules/manager/poetry/artifacts.spec.ts
@@ -240,6 +240,10 @@ describe('modules/manager/poetry/artifacts', () => {
     datasource.getPkgReleases.mockResolvedValueOnce({
       releases: [{ version: '2.7.5' }, { version: '3.4.2' }],
     });
+    // poetry
+    datasource.getPkgReleases.mockResolvedValueOnce({
+      releases: [{ version: '1.2.0' }],
+    });
     const updatedDeps = [{ depName: 'dep1' }];
     expect(
       await updateArtifacts({
@@ -278,7 +282,7 @@ describe('modules/manager/poetry/artifacts', () => {
           'bash -l -c "' +
           'install-tool python 3.4.2 ' +
           '&& ' +
-          "pip install --user 'poetry>=1.0' " +
+          'install-tool poetry 1.2.0 ' +
           '&& ' +
           'poetry update --lock --no-interaction dep1' +
           '"',
@@ -301,6 +305,10 @@ describe('modules/manager/poetry/artifacts', () => {
     datasource.getPkgReleases.mockResolvedValueOnce({
       releases: [{ version: '2.7.5' }, { version: '3.3.2' }],
     });
+    // poetry
+    datasource.getPkgReleases.mockResolvedValueOnce({
+      releases: [{ version: '1.0.0' }, { version: '1.2.0' }],
+    });
     const updatedDeps = [{ depName: 'dep1' }];
     expect(
       await updateArtifacts({
@@ -337,7 +345,7 @@ describe('modules/manager/poetry/artifacts', () => {
           'bash -l -c "' +
           'install-tool python 2.7.5 ' +
           '&& ' +
-          "pip install --user 'poetry>=1.0' " +
+          'install-tool poetry 1.2.0 ' +
           '&& ' +
           'poetry update --lock --no-interaction dep1' +
           '"',
@@ -358,6 +366,10 @@ describe('modules/manager/poetry/artifacts', () => {
     datasource.getPkgReleases.mockResolvedValueOnce({
       releases: [{ version: '2.7.5' }, { version: '3.3.2' }],
     });
+    // poetry
+    datasource.getPkgReleases.mockResolvedValueOnce({
+      releases: [{ version: '1.2.0' }],
+    });
     const updatedDeps = [{ depName: 'dep1' }];
     expect(
       await updateArtifacts({
@@ -381,7 +393,7 @@ describe('modules/manager/poetry/artifacts', () => {
 
     expect(execSnapshots).toMatchObject([
       { cmd: 'install-tool python 2.7.5' },
-      { cmd: "pip install --user 'poetry>=1.0'" },
+      { cmd: 'install-tool poetry 1.2.0' },
       { cmd: 'poetry update --lock --no-interaction dep1' },
     ]);
   });
diff --git a/lib/modules/manager/poetry/artifacts.ts b/lib/modules/manager/poetry/artifacts.ts
index 56a1dab6d23eff5cb9cff93729f80cb6d69c021e..bb2a1b42b6315d42923ce2c8478086b8c99af2ef 100644
--- a/lib/modules/manager/poetry/artifacts.ts
+++ b/lib/modules/manager/poetry/artifacts.ts
@@ -173,8 +173,11 @@ export async function updateArtifacts({
           .join(' ')}`
       );
     }
-    const constraint = getPythonConstraint(existingLockFileContent, config);
-    const poetryVersion =
+    const pythonConstraint = getPythonConstraint(
+      existingLockFileContent,
+      config
+    );
+    const poetryConstraint =
       config.constraints?.poetry ?? getPoetryRequirement(newPackageFileContent);
     const extraEnv = {
       ...getSourceCredentialVars(newPackageFileContent, packageFileName),
@@ -185,9 +188,9 @@ export async function updateArtifacts({
       cwdFile: packageFileName,
       extraEnv,
       docker: {},
-      toolConstraints: [{ toolName: 'python', constraint }],
-      preCommands: [
-        `pip install --user ${quote(`poetry${poetryVersion ?? ''}`)}`,
+      toolConstraints: [
+        { toolName: 'python', constraint: pythonConstraint },
+        { toolName: 'poetry', constraint: poetryConstraint },
       ],
     };
     await exec(cmd, execOptions);