Python: Allow installing requirement files

Change-Id: If4ac1470fdba4b9f1070fc37d35d5d738a18865f
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2023-08-10 17:25:09 +02:00
parent 301112adeb
commit 7fd8df9300
2 changed files with 26 additions and 7 deletions

View File

@@ -35,6 +35,16 @@ PipInstallTask::PipInstallTask(const FilePath &python)
m_watcher.setFuture(m_future.future());
}
void PipInstallTask::setRequirements(const Utils::FilePath &requirementFile)
{
m_requirementsFile = requirementFile;
}
void PipInstallTask::setWorkingDirectory(const Utils::FilePath &workingDirectory)
{
m_process.setWorkingDirectory(workingDirectory);
}
void PipInstallTask::addPackage(const PipPackage &package)
{
m_packages << package;
@@ -47,18 +57,22 @@ void PipInstallTask::setPackages(const QList<PipPackage> &packages)
void PipInstallTask::run()
{
if (m_packages.isEmpty()) {
if (m_packages.isEmpty() && m_requirementsFile.isEmpty()) {
emit finished(false);
return;
}
const QString taskTitle = Tr::tr("Install Python Packages");
Core::ProgressManager::addTask(m_future.future(), taskTitle, pipInstallTaskId);
QStringList arguments = {"-m", "pip", "install"};
for (const PipPackage &package : m_packages) {
QString pipPackage = package.packageName;
if (!package.version.isEmpty())
pipPackage += "==" + package.version;
arguments << pipPackage;
if (!m_requirementsFile.isEmpty())
arguments << "-r" << m_requirementsFile.toString();
else {
for (const PipPackage &package : m_packages) {
QString pipPackage = package.packageName;
if (!package.version.isEmpty())
pipPackage += "==" + package.version;
arguments << pipPackage;
}
}
// add --user to global pythons, but skip it for venv pythons
@@ -115,7 +129,9 @@ void PipInstallTask::handleError()
QString PipInstallTask::packagesDisplayName() const
{
return Utils::transform(m_packages, &PipPackage::displayName).join(", ");
return m_requirementsFile.isEmpty()
? Utils::transform(m_packages, &PipPackage::displayName).join(", ")
: m_requirementsFile.toUserOutput();
}
void PipPackageInfo::parseField(const QString &field, const QStringList &data)

View File

@@ -63,6 +63,8 @@ class PipInstallTask : public QObject
Q_OBJECT
public:
explicit PipInstallTask(const Utils::FilePath &python);
void setRequirements(const Utils::FilePath &requirementFile);
void setWorkingDirectory(const Utils::FilePath &workingDirectory);
void addPackage(const PipPackage &package);
void setPackages(const QList<PipPackage> &packages);
void run();
@@ -80,6 +82,7 @@ private:
const Utils::FilePath m_python;
QList<PipPackage> m_packages;
Utils::FilePath m_requirementsFile;
Utils::Process m_process;
QFutureInterface<void> m_future;
QFutureWatcher<void> m_watcher;