diff --git a/.github/workflows/docker-bench-security.yml b/.github/workflows/docker-bench-security.yml
index 588c454187..1d1b56b486 100644
--- a/.github/workflows/docker-bench-security.yml
+++ b/.github/workflows/docker-bench-security.yml
@@ -16,10 +16,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/double_ws_export.yml b/.github/workflows/double_ws_export.yml
index efabaaa6d6..d4d6b0459c 100644
--- a/.github/workflows/double_ws_export.yml
+++ b/.github/workflows/double_ws_export.yml
@@ -23,10 +23,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/experimental_workflow_tests.yml b/.github/workflows/experimental_workflow_tests.yml
index 84166ab362..d99cec2e5f 100644
--- a/.github/workflows/experimental_workflow_tests.yml
+++ b/.github/workflows/experimental_workflow_tests.yml
@@ -25,7 +25,7 @@ jobs:
- name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.10"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/hadolint.yml b/.github/workflows/hadolint.yml
index 749d9fb51b..6e90292158 100644
--- a/.github/workflows/hadolint.yml
+++ b/.github/workflows/hadolint.yml
@@ -19,10 +19,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 4ebdd422fb..13d53e885d 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -19,10 +19,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install linters
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/pki.yml b/.github/workflows/pki.yml
index 9cac1df031..d8ecbecb03 100644
--- a/.github/workflows/pki.yml
+++ b/.github/workflows/pki.yml
@@ -23,10 +23,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
@@ -40,10 +40,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/pytest_coverage.yml b/.github/workflows/pytest_coverage.yml
index bf968fc5f0..9371f74e13 100644
--- a/.github/workflows/pytest_coverage.yml
+++ b/.github/workflows/pytest_coverage.yml
@@ -24,10 +24,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/straggler-handling.yml b/.github/workflows/straggler-handling.yml
index c37fa7daf4..47b7f05709 100644
--- a/.github/workflows/straggler-handling.yml
+++ b/.github/workflows/straggler-handling.yml
@@ -26,10 +26,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/task_runner_e2e.yml b/.github/workflows/task_runner_e2e.yml
index 4801ab6fad..1c1a91ca67 100644
--- a/.github/workflows/task_runner_e2e.yml
+++ b/.github/workflows/task_runner_e2e.yml
@@ -39,7 +39,7 @@ jobs:
# There are open issues for some of the models, so excluding them for now:
# model_name: [ "torch_cnn_mnist", "keras_cnn_mnist", "torch_cnn_histology" ]
model_name: ["torch_cnn_mnist", "keras_cnn_mnist"]
- python_version: ["3.8", "3.9", "3.10"]
+ python_version: ["3.9", "3.10", "3.11"]
fail-fast: false # do not immediately fail if one of the combinations fail
env:
diff --git a/.github/workflows/taskrunner.yml b/.github/workflows/taskrunner.yml
index 8f1bcc35dc..1e3a3ab6c2 100644
--- a/.github/workflows/taskrunner.yml
+++ b/.github/workflows/taskrunner.yml
@@ -21,7 +21,7 @@ jobs:
strategy:
matrix:
os: ['ubuntu-latest', 'windows-latest']
- python-version: ['3.8','3.9','3.10','3.11']
+ python-version: ["3.9", "3.10", "3.11"]
runs-on: ${{ matrix.os }}
timeout-minutes: 15
diff --git a/.github/workflows/taskrunner_eden_pipeline.yml b/.github/workflows/taskrunner_eden_pipeline.yml
index 2cb0e9effc..44de314a5f 100644
--- a/.github/workflows/taskrunner_eden_pipeline.yml
+++ b/.github/workflows/taskrunner_eden_pipeline.yml
@@ -22,10 +22,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/tr_docker_gramine_direct.yml b/.github/workflows/tr_docker_gramine_direct.yml
index be2afea5f9..855a059c98 100644
--- a/.github/workflows/tr_docker_gramine_direct.yml
+++ b/.github/workflows/tr_docker_gramine_direct.yml
@@ -17,10 +17,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/tr_docker_native.yml b/.github/workflows/tr_docker_native.yml
index 899fcd8296..f97b268636 100644
--- a/.github/workflows/tr_docker_native.yml
+++ b/.github/workflows/tr_docker_native.yml
@@ -17,10 +17,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml
index 747ca067a4..4c3c99af43 100644
--- a/.github/workflows/ubuntu.yml
+++ b/.github/workflows/ubuntu.yml
@@ -18,10 +18,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
@@ -40,10 +40,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
index 6d8330d553..1e5b245cc1 100644
--- a/.github/workflows/windows.yml
+++ b/.github/workflows/windows.yml
@@ -17,10 +17,10 @@ jobs:
timeout-minutes: 15
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
@@ -38,10 +38,10 @@ jobs:
timeout-minutes: 15
steps:
- uses: actions/checkout@v3
- - name: Set up Python 3.8
+ - name: Set up Python 3
uses: actions/setup-python@v3
with:
- python-version: "3.8"
+ python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/Jenkinsfile b/Jenkinsfile
index b4e012ad32..c1904d0453 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -81,7 +81,7 @@ pipeline {
SNYK_ALLOW_LONG_PROJECT_NAME = true
SNYK_USE_MULTI_PROC = true
SNYK_DEBUG = true
- SNYK_PYTHON_VERSION = '3.8'
+ SNYK_PYTHON_VERSION = '3.9'
BANDIT_SOURCE_PATH = 'openfl/ openfl-workspace/ openfl-tutorials/'
BANDIT_SEVERITY_LEVEL = 'high'
@@ -114,7 +114,7 @@ pipeline {
stage('Build Package') {
agent {
docker {
- image 'python:3.8'
+ image 'python:3.9'
}
}
steps {
diff --git a/README.md b/README.md
index f1e07aabbe..eb5a28e8d4 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,8 @@
-[![PyPI - Python Version](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10-blue)](https://pypi.org/project/openfl/)
+
+[![PyPI - Python Version](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11-blue)](https://pypi.org/project/openfl/)
[![Ubuntu CI status](https://github.com/securefederatedai/openfl/actions/workflows/ubuntu.yml/badge.svg)](https://github.com/securefederatedai/openfl/actions/workflows/ubuntu.yml)
[![Windows CI status](https://github.com/securefederatedai/openfl/actions/workflows/windows.yml/badge.svg)](https://github.com/securefederatedai/openfl/actions/workflows/windows.yml)
[![Documentation Status](https://readthedocs.org/projects/openfl/badge/?version=latest)](https://openfl.readthedocs.io/en/latest/?badge=latest)
diff --git a/docs/about/features_index/taskrunner.rst b/docs/about/features_index/taskrunner.rst
index f4e3cc0730..75b408f0d2 100644
--- a/docs/about/features_index/taskrunner.rst
+++ b/docs/about/features_index/taskrunner.rst
@@ -147,7 +147,7 @@ Bare Metal Approach
STEP 1: Create a Workspace
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-1. Start a Python 3.8 (>=3.6, <3.11) virtual environment and confirm |productName| is available.
+1. Start a Python 3.9 (>=3.9, <3.12) virtual environment and confirm |productName| is available.
.. code-block:: console
diff --git a/docs/developer_guide/running_the_federation.notebook.rst b/docs/developer_guide/running_the_federation.notebook.rst
index d335c112d0..f5bd9c12ff 100644
--- a/docs/developer_guide/running_the_federation.notebook.rst
+++ b/docs/developer_guide/running_the_federation.notebook.rst
@@ -17,7 +17,7 @@ You will start a Jupyter\* \ lab server and receive a URL you can use to access
Start the Tutorials
===================
-1. Start a Python\* \ 3.8 (>=3.6, <3.9) virtual environment and confirm |productName| is available.
+1. Start a Python\* \ 3.9 (>=3.9, <3.12) virtual environment and confirm |productName| is available.
.. code-block:: python
diff --git a/docs/developer_guide/running_the_federation_with_gandlf.rst b/docs/developer_guide/running_the_federation_with_gandlf.rst
index 34d5445233..331b17c804 100644
--- a/docs/developer_guide/running_the_federation_with_gandlf.rst
+++ b/docs/developer_guide/running_the_federation_with_gandlf.rst
@@ -114,7 +114,7 @@ However, continue with the following procedure for details in creating a federat
STEP 1: Install GaNDLF prerequisites and Create a Workspace
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-1. Start a Python 3.8 (>=3.7, <3.11) virtual environment and confirm |productName| is available.
+1. Start a Python 3.9 (>=3.9, <3.12) virtual environment and confirm |productName| is available.
.. code-block:: python
diff --git a/docs/get_started/installation.rst b/docs/get_started/installation.rst
index 0b246ddb7d..2e79c92250 100644
--- a/docs/get_started/installation.rst
+++ b/docs/get_started/installation.rst
@@ -19,7 +19,7 @@ Install the Package
Follow this procedure to prepare the environment and install the |productName| package.
Perform this procedure on every node in the federation.
-1. Install a Python 3.8 (>=3.6, <3.9) virtual environment using venv.
+1. Install a Python 3.9 (>=3.9, <3.12) virtual environment using venv.
See the `Venv installation guide `_ for details.
diff --git a/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt b/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt
index fd3a372667..4dc2bc32cb 100644
--- a/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt
+++ b/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt
@@ -1,11 +1,10 @@
-astor==0.8.1
chardet
charset-normalizer
dill==0.3.6
matplotlib>=2.0.0
metaflow==2.7.15
nbdev==2.3.12
-nbformat
+nbformat==5.10.4
ray==2.9.2
torch
torchvision
diff --git a/openfl-workspace/keras_cnn_mnist/requirements.txt b/openfl-workspace/keras_cnn_mnist/requirements.txt
index af80212eeb..4ce0afb4ce 100644
--- a/openfl-workspace/keras_cnn_mnist/requirements.txt
+++ b/openfl-workspace/keras_cnn_mnist/requirements.txt
@@ -1 +1,2 @@
+numpy==1.23.5
tensorflow==2.13
diff --git a/openfl/experimental/workflow/workspace_export/export.py b/openfl/experimental/workflow/workspace_export/export.py
index 7df2a7684b..0e00e2efd6 100644
--- a/openfl/experimental/workflow/workspace_export/export.py
+++ b/openfl/experimental/workflow/workspace_export/export.py
@@ -13,7 +13,6 @@
from pathlib import Path
from shutil import copytree
-import astor
import nbformat
import yaml
from nbdev.export import nb_export
@@ -194,13 +193,13 @@ def __extract_class_initializing_args(self, class_name): # noqa: C901
# Use the variable name as the argument value
instantiation_args["args"][arg.id] = arg.id
elif isinstance(arg, ast.Constant):
- instantiation_args["args"][arg.s] = astor.to_source(arg)
+ instantiation_args["args"][arg.s] = ast.unparse(arg)
else:
- instantiation_args["args"][arg.arg] = astor.to_source(arg).strip()
+ instantiation_args["args"][arg.arg] = ast.unparse(arg).strip()
for kwarg in node.keywords:
# Iterate through keyword arguments
- value = astor.to_source(kwarg.value).strip()
+ value = ast.unparse(kwarg.value).strip()
# If paranthese or brackets around the value is
# found and it's not tuple or list remove
diff --git a/setup.py b/setup.py
index e5018fb12c..8e2d1b1c68 100644
--- a/setup.py
+++ b/setup.py
@@ -95,7 +95,7 @@ def run(self):
'protobuf>=4.22,<6.0.0',
'grpcio>=1.56.2,<1.66.0',
],
- python_requires='>=3.8, <3.12',
+ python_requires='>=3.9, <3.12',
project_urls={
'Bug Tracker': 'https://github.com/securefederatedai/openfl/issues',
'Documentation': 'https://openfl.readthedocs.io/en/stable/',
@@ -109,7 +109,6 @@ def run(self):
'Topic :: System :: Distributed Computing',
'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
diff --git a/tests/github/pki_wrong_cn.py b/tests/github/pki_wrong_cn.py
index 7ce669d707..33eaeb0a9d 100644
--- a/tests/github/pki_wrong_cn.py
+++ b/tests/github/pki_wrong_cn.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2020-2023 Intel Corporation
+# Copyright (C) 2020-2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
import grpc
import subprocess
@@ -75,7 +75,7 @@ def start_aggregator():
subprocess.check_call([
'fx', 'workspace', 'create',
'--prefix', prefix,
- '--template', 'keras_cnn_mnist'
+ '--template', 'torch_cnn_mnist'
])
os.chdir(prefix)
fqdn = getfqdn_env()