forked from qt-creator/qt-creator
Python: install lsp into tempdir for remote interpreters
Change-Id: I4b0b1a47c73742cc14f68d80b9116fcd51224bd1 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "pythonplugin.h"
|
#include "pythonplugin.h"
|
||||||
#include "pythontr.h"
|
#include "pythontr.h"
|
||||||
|
#include "pythonutils.h"
|
||||||
|
|
||||||
#include <coreplugin/messagemanager.h>
|
#include <coreplugin/messagemanager.h>
|
||||||
#include <coreplugin/progressmanager/progressmanager.h>
|
#include <coreplugin/progressmanager/progressmanager.h>
|
||||||
@@ -80,10 +81,12 @@ void PipInstallTask::run()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_targetPath.isEmpty())
|
if (!m_targetPath.isEmpty()) {
|
||||||
arguments << "-t" << m_targetPath.toString();
|
QTC_ASSERT(m_targetPath.isSameDevice(m_python), emit finished(false); return);
|
||||||
else if (!QDir(m_python.parentDir().toString()).exists("activate"))
|
arguments << "-t" << m_targetPath.path();
|
||||||
|
} else if (!isVenvPython(m_python)) {
|
||||||
arguments << "--user"; // add --user to global pythons, but skip it for venv pythons
|
arguments << "--user"; // add --user to global pythons, but skip it for venv pythons
|
||||||
|
}
|
||||||
|
|
||||||
m_process.setCommand({m_python, arguments});
|
m_process.setCommand({m_python, arguments});
|
||||||
m_process.setTerminalMode(TerminalMode::Run);
|
m_process.setTerminalMode(TerminalMode::Run);
|
||||||
|
|||||||
@@ -74,12 +74,12 @@ static QHash<FilePath, PyLSClient*> &pythonClients()
|
|||||||
|
|
||||||
static FilePath pyLspPath(const FilePath &python)
|
static FilePath pyLspPath(const FilePath &python)
|
||||||
{
|
{
|
||||||
if (python.needsDevice())
|
|
||||||
return {};
|
|
||||||
const QString version = pythonVersion(python);
|
const QString version = pythonVersion(python);
|
||||||
if (version.isEmpty())
|
if (!python.needsDevice())
|
||||||
return {};
|
return Core::ICore::userResourcePath() / "pylsp" / version;
|
||||||
return Core::ICore::userResourcePath("pylsp") / FileUtils::fileSystemFriendlyName(version);
|
if (const expected_str<FilePath> tmpDir = python.tmpDir())
|
||||||
|
return *tmpDir / "qc-pylsp" / version;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
static PythonLanguageServerState checkPythonLanguageServer(const FilePath &python)
|
static PythonLanguageServerState checkPythonLanguageServer(const FilePath &python)
|
||||||
@@ -113,20 +113,22 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void startImpl() override
|
void startImpl() override
|
||||||
{
|
{
|
||||||
if (!m_cmd.executable().needsDevice()) {
|
const FilePath python = m_cmd.executable();
|
||||||
|
Environment env = python.deviceEnvironment();
|
||||||
|
const FilePath lspPath = pyLspPath(python);
|
||||||
|
if (!lspPath.isEmpty() && lspPath.exists() && QTC_GUARD(lspPath.isSameDevice(python))) {
|
||||||
|
env.appendOrSet("PYTHONPATH",
|
||||||
|
lspPath.path(),
|
||||||
|
OsSpecificAspects::pathListSeparator(env.osType()));
|
||||||
|
}
|
||||||
|
if (!python.needsDevice()) {
|
||||||
// todo check where to put this tempdir in remote setups
|
// todo check where to put this tempdir in remote setups
|
||||||
Environment env = Environment::systemEnvironment();
|
|
||||||
env.appendOrSet("PYTHONPATH",
|
env.appendOrSet("PYTHONPATH",
|
||||||
m_extraPythonPath.path().toString(),
|
m_extraPythonPath.path().toString(),
|
||||||
OsSpecificAspects::pathListSeparator(env.osType()));
|
OsSpecificAspects::pathListSeparator(env.osType()));
|
||||||
const FilePath lspPath = pyLspPath(m_cmd.executable());
|
|
||||||
if (!lspPath.isEmpty() && lspPath.exists()) {
|
|
||||||
env.appendOrSet("PYTHONPATH",
|
|
||||||
pyLspPath(m_cmd.executable()).toString(),
|
|
||||||
OsSpecificAspects::pathListSeparator(env.osType()));
|
|
||||||
}
|
|
||||||
setEnvironment(env);
|
|
||||||
}
|
}
|
||||||
|
if (env.hasChanges())
|
||||||
|
setEnvironment(env);
|
||||||
StdIOClientInterface::startImpl();
|
StdIOClientInterface::startImpl();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user