mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-82457 PythonSdk: Cannot configure from inspection from requirements.txt
Signed-off-by: Nikita.Ashihmin <nikita.ashihmin@jetbrains.com> GitOrigin-RevId: 405dc648ccb26a6aa8e9b48e052bb27d9ff24a5e
This commit is contained in:
committed by
intellij-monorepo-bot
parent
66b38c2248
commit
685e2fd0ce
@@ -128,7 +128,8 @@
|
||||
<extensions defaultExtensionNs="Pythonid">
|
||||
<projectSdkConfigurationExtension
|
||||
implementation="com.intellij.pycharm.community.ide.impl.configuration.PyRequirementsTxtOrSetupPySdkConfiguration"
|
||||
id="requirementsTxtOrSetupPy"/>
|
||||
id="
|
||||
requirementsTxtOrSetupPy"/>
|
||||
<projectSdkConfigurationExtension
|
||||
implementation="com.intellij.pycharm.community.ide.impl.conda.PyEnvironmentYmlSdkConfiguration"
|
||||
id="environmentYml"/>
|
||||
|
||||
+3
-4
@@ -69,10 +69,9 @@ class PythonSdkConfigurator : DirectoryProjectConfigurator {
|
||||
|
||||
StartupManager.getInstance(project).runWhenProjectIsInitialized {
|
||||
PyPackageCoroutine.launch(project) {
|
||||
val extension = findExtension(module)
|
||||
val lifetime = extension?.let { suppressTipAndInspectionsFor(module, it) }
|
||||
|
||||
withBackgroundProgress(project, PySdkBundle.message("python.configuring.interpreter.progress"), extension == null) {
|
||||
withBackgroundProgress(project, PySdkBundle.message("python.configuring.interpreter.progress"), true) {
|
||||
val extension = findExtension(module)
|
||||
val lifetime = extension?.let { suppressTipAndInspectionsFor(module, it) }
|
||||
lifetime.use { configureSdk(project, module, extension) }
|
||||
}
|
||||
}
|
||||
|
||||
+31
-12
@@ -9,7 +9,6 @@ import com.intellij.openapi.diagnostic.fileLogger
|
||||
import com.intellij.openapi.diagnostic.thisLogger
|
||||
import com.intellij.openapi.fileTypes.FileTypeRegistry
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.progress.ProgressManager
|
||||
import com.intellij.openapi.projectRoots.ProjectJdkTable
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
|
||||
@@ -20,6 +19,7 @@ import com.intellij.openapi.util.NlsSafe
|
||||
import com.intellij.openapi.util.use
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.platform.util.progress.reportRawProgress
|
||||
import com.intellij.pycharm.community.ide.impl.PyCharmCommunityCustomizationBundle
|
||||
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.InputData
|
||||
import com.intellij.pycharm.community.ide.impl.configuration.PySdkConfigurationCollector.Source
|
||||
@@ -32,13 +32,16 @@ import com.jetbrains.python.PyBundle
|
||||
import com.jetbrains.python.PySdkBundle
|
||||
import com.jetbrains.python.packaging.PyPackageManager
|
||||
import com.jetbrains.python.packaging.PyPackageUtil
|
||||
import com.jetbrains.python.packaging.PyTargetEnvironmentPackageManager
|
||||
import com.jetbrains.python.packaging.management.PythonPackageManager
|
||||
import com.jetbrains.python.packaging.requirementsTxt.PythonRequirementTxtSdkUtils
|
||||
import com.jetbrains.python.packaging.setupPy.SetupPyManager
|
||||
import com.jetbrains.python.requirements.RequirementsFileType
|
||||
import com.jetbrains.python.sdk.basePath
|
||||
import com.jetbrains.python.sdk.configuration.PyProjectSdkConfigurationExtension
|
||||
import com.jetbrains.python.sdk.configuration.createVirtualEnvAndSdkSynchronously
|
||||
import com.jetbrains.python.sdk.isTargetBased
|
||||
import com.jetbrains.python.sdk.showSdkExecutionException
|
||||
import com.jetbrains.python.util.ShowingMessageErrorSync
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.awt.BorderLayout
|
||||
@@ -86,20 +89,24 @@ class PyRequirementsTxtOrSetupPySdkConfiguration : PyProjectSdkConfigurationExte
|
||||
return sdk
|
||||
}
|
||||
|
||||
thisLogger().debug("Installing packages")
|
||||
ProgressManager.progress(PyBundle.message("python.packaging.installing.packages"))
|
||||
val basePath = module.basePath
|
||||
val isRequirements = requirementsTxtOrSetupPyFile.name != SetupPyManager.SETUP_PY
|
||||
|
||||
val packageManager = PyPackageManager.getInstance(sdk)
|
||||
val command = getCommandForPipInstall(requirementsTxtOrSetupPyFile)
|
||||
if (isRequirements) {
|
||||
PythonRequirementTxtSdkUtils.saveRequirementsTxtPath(module.project, sdk, requirementsTxtOrSetupPyFile.toNioPath())
|
||||
}
|
||||
|
||||
// FIXME: lame cast...
|
||||
if (!sdk.isTargetBased() && packageManager is PyTargetEnvironmentPackageManager) {
|
||||
packageManager.install(emptyList(), command, basePath)
|
||||
if (!sdk.isTargetBased()) {
|
||||
val pythonPackageManager = PythonPackageManager.forSdk(module.project, sdk)
|
||||
pythonPackageManager.sync().getOr {
|
||||
PySdkConfigurationCollector.logVirtualEnv(module.project, VirtualEnvResult.INSTALLATION_FAILURE)
|
||||
ShowingMessageErrorSync.emit(it.error)
|
||||
return null
|
||||
}
|
||||
}
|
||||
else {
|
||||
// TODO: double check installing over remote target
|
||||
packageManager.install(emptyList(), command)
|
||||
withContext(Dispatchers.Default) {
|
||||
createTargetBased(sdk, requirementsTxtOrSetupPyFile)
|
||||
}
|
||||
}
|
||||
|
||||
return sdk
|
||||
@@ -112,6 +119,18 @@ class PyRequirementsTxtOrSetupPySdkConfiguration : PyProjectSdkConfigurationExte
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun createTargetBased(
|
||||
sdk: Sdk,
|
||||
requirementsTxtOrSetupPyFile: VirtualFile,
|
||||
) {
|
||||
reportRawProgress {
|
||||
it.text(PyBundle.message("python.packaging.installing.packages"))
|
||||
val packageManager = PyPackageManager.getInstance(sdk)
|
||||
val command = getCommandForPipInstall(requirementsTxtOrSetupPyFile)
|
||||
packageManager.install(emptyList(), command)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getRequirementsTxtOrSetupPy(module: Module) =
|
||||
PyPackageUtil.findRequirementsTxt(module) ?: PyPackageUtil.findSetupPy(module)?.virtualFile
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ import com.intellij.psi.PsiManager
|
||||
import com.jetbrains.python.PythonPluginDisposable
|
||||
import com.jetbrains.python.packaging.PyRequirement
|
||||
import com.jetbrains.python.packaging.dependencies.cache.PythonDependenciesManagerCached
|
||||
import com.jetbrains.python.packaging.setupPy.SetupPyHelpers.SETUP_PY
|
||||
import com.jetbrains.python.psi.PyFile
|
||||
import com.jetbrains.python.sdk.associatedModuleDir
|
||||
import com.jetbrains.python.sdk.sdkFlavor
|
||||
@@ -60,6 +59,9 @@ class SetupPyManager private constructor(project: Project, val sdk: Sdk) : Pytho
|
||||
companion object {
|
||||
private val KEY = Key<SetupPyManager>(this::class.java.name)
|
||||
|
||||
@ApiStatus.Internal
|
||||
const val SETUP_PY: String = SetupPyHelpers.SETUP_PY
|
||||
|
||||
@JvmStatic
|
||||
fun getInstance(project: Project, sdk: Sdk): SetupPyManager = sdk.getOrCreateUserDataUnsafe(KEY) {
|
||||
SetupPyManager(project, sdk).also {
|
||||
|
||||
@@ -30,6 +30,8 @@ import com.jetbrains.python.psi.PyFile
|
||||
import com.jetbrains.python.sdk.PySdkPopupFactory
|
||||
import com.jetbrains.python.sdk.configurePythonSdk
|
||||
import com.jetbrains.python.sdk.uv.isUv
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
object PyProjectSdkConfiguration {
|
||||
|
||||
@@ -45,7 +47,9 @@ object PyProjectSdkConfiguration {
|
||||
setSdkUsingExtension(module, extension) {
|
||||
reportRawProgress {
|
||||
it.text(extension.getIntention(module) ?: "")
|
||||
extension.createAndAddSdkForInspection(module)
|
||||
withContext(Dispatchers.Default) {
|
||||
extension.createAndAddSdkForInspection(module)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user