Fedora 38 create virtualenv Python3.8?

Gregorie

Lieutenant
Registriert
Apr. 2017
Beiträge
778
Ich wollte ein Git Repo Python Projekt ausprobieren, da ich unter conda das noch nicht fehlerfrei zu installieren bekam, wollte ich es ohne aktive conda Umgebung probieren unter Python 3.8.
Fedora 38 hat aktuell Python 3.11.
Ich machte folgendes im Terminal (conda deactivate) wechseln in das git geclonte Verzeichnis, dann:
python3.8 -m venv .venv
Verzeichnis .venv wurde angelegt, darin Python 3.8.
./.venv/bin/activate
keine Fehlermeldungen, gebe ich nun python --version ein wird aber Python 3.11 angezeigt, ist das nicht falsch?
 
So ist das also o.k., wenn ich Python 3.8 verwenden will in der virtuellem Umgebung?
Es ist nämlich so, ich will das ganze Git Projekt nochmals neu installieren.
pip install -r requirements.txt gibt nun sofort einen Error aus unter conda kam ich viel weiter mit der Installation. Pip sucht auch in File "/home/bill/.local/lib/python3.11/site-packages/pip/...
Ist das richtig so?

Code:
WARNING: Skipping /home/bill/.local/lib/python3.11/site-packages/tornado-4.2.dist-info due to invalid metadata entry 'name'
WARNING: Skipping /home/bill/.local/lib/python3.11/site-packages/nbconvert-5.3.1.dist-info due to invalid metadata entry 'name'

Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error
 
  × Preparing metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [20 lines of output]
      Traceback (most recent call last):
        File "/home/bill/.local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process
 
wo nutzt du eine virtuelle umgebung?
Gregorie schrieb:
aus unter conda kam ich viel weiter mit der Installation.
installation von was?

wie verwaltest du deine python versionen und venvs?
pyenv? venv? was anderes?
 
Zuletzt bearbeitet:
@madmax2010
Wo ich die virtuelle umgebung nutze, lokal auf meiner SSD unter Fedora 38, oder was meinst Du mit der Frage genau? Hier bei diesem Projekt wollte ich nun nicht conda verwenden, sondern venv.
Es gibt auch eine run.sh, die erzeugt selbst eine ./.venv, wie ich nun bemerkt habe, aber scheinbar
z.Z. für Python 3.11, nicht für 3.8. und ob 3.11 auch funktionieren sollte, weiß ich nicht.
Code:
#!/bin/bash
if [[ "$(uname)" == "Darwin" ]]; then
  # macOS specific env:
  export PYTORCH_ENABLE_MPS_FALLBACK=1
  export PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0
elif [[ "$(uname)" != "Linux" ]]; then
  echo "Unsupported operating system."
  exit 1
fi

if [ -d ".venv" ]; then
  echo "Activate venv..."
  source .venv/bin/activate
else
  echo "Create venv..."
  requirements_file="requirements.txt"

  # Check if Python 3.8 is installed
  if ! command -v python3 &> /dev/null; then
    echo "Python 3 not found. Attempting to install 3.8..."
    if [[ "$(uname)" == "Darwin" ]] && command -v brew &> /dev/null; then
      brew install python@3.8
    elif [[ "$(uname)" == "Linux" ]] && command -v apt-get &> /dev/null; then
      sudo apt-get update
      sudo apt-get install python3.8
    else
      echo "Please install Python 3.8 manually."
      exit 1
    fi
  fi

  python3 -m venv .venv
  source .venv/bin/activate

  # Check if required packages are installed and install them if not
  if [ -f "${requirements_file}" ]; then
    installed_packages=$(python3 -m pip freeze)
    while IFS= read -r package; do
      [[ "${package}" =~ ^#.* ]] && continue
      package_name=$(echo "${package}" | sed 's/[<>=!].*//')
      if ! echo "${installed_packages}" | grep -q "${package_name}"; then
        echo "${package_name} not found. Attempting to install..."
        python3 -m pip install --upgrade "${package}"
      fi
    done < "${requirements_file}"
  else
    echo "${requirements_file} not found. Please ensure the requirements file with required packages exists."
    exit 1
  fi
fi

# Download models
./tools/dlmodels.sh

if [[ $? -ne 0 ]]; then
  exit 1
fi

# Run the main script
python3 infer-web.py --pycmd python3
Python 3.8
Edit: Das Script ist scheinbar für Mac OS ausgelegt, denn es installiert Python 3.11. automatisch statt
3.8. und Linux apt habe ich nicht installiert nur dnf.

Das Standard Terminal öffnet bei mir, da Conda installiert ist trotz Deaktivierung mit dem base Prompt von conda, das ist wahrscheinlich auch nicht optimal oder? Denn bei manueller Aktivierung der ./.venv zeigt
der Prompt nicht (venv)

Das Script run.sh läuft durch bis Error:
Code:
hubert_base.pt in ./assets/hubert/pretrained checked.
required files check finished.
Traceback (most recent call last):
  File "/home/bill/Retrieval-based-Voice-Conversion-WebUI/infer-web.py", line 8, in <module>
    from infer.modules.vc.modules import VC
  File "/home/bill/Retrieval-based-Voice-Conversion-WebUI/infer/modules/vc/modules.py", line 19, in <module>
    from infer.modules.vc.utils import *
  File "/home/bill/Retrieval-based-Voice-Conversion-WebUI/infer/modules/vc/utils.py", line 3, in <module>
    from fairseq import checkpoint_utils
  File "/home/bill/Retrieval-based-Voice-Conversion-WebUI/.venv/lib/python3.11/site-packages/fairseq/init.py", line 20, in <module>
    from fairseq.distributed import utils as distributed_utils
  File "/home/bill/Retrieval-based-Voice-Conversion-WebUI/.venv/lib/python3.11/site-packages/fairseq/distributed/init.py", line 7, in <module>
    from .fully_sharded_data_parallel import (
  File "/home/bill/Retrieval-based-Voice-Conversion-WebUI/.venv/lib/python3.11/site-packages/fairseq/distributed/fully_sharded_data_parallel.py", line 10, in <module>
    from fairseq.dataclass.configs import DistributedTrainingConfig
  File "/home/bill/Retrieval-based-Voice-Conversion-WebUI/.venv/lib/python3.11/site-packages/fairseq/dataclass/init.py", line 6, in <module>
    from .configs import FairseqDataclass
  File "/home/bill/Retrieval-based-Voice-Conversion-WebUI/.venv/lib/python3.11/site-packages/fairseq/dataclass/configs.py", line 1104, in <module>
    @dataclass
     ^^^^^^^^^
  File "/home/bill/anaconda3/lib/python3.11/dataclasses.py", line 1230, in dataclass
    return wrap(cls)
           ^^^^^^^^^
  File "/home/bill/anaconda3/lib/python3.11/dataclasses.py", line 1220, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/bill/anaconda3/lib/python3.11/dataclasses.py", line 958, in _process_class
    cls_fields.append(_get_field(cls, name, type, kw_only))
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/bill/anaconda3/lib/python3.11/dataclasses.py", line 815, in _get_field
    raise ValueError(f'mutable default {type(f.default)} for field '
ValueError: mutable default <class 'fairseq.dataclass.configs.CommonConfig'> for field common is not allowed: use default_factory
 
Zuletzt bearbeitet:
Jetzt klappte es mit virtualenv statt venv. :)
Ich wechselte in das geklonte Verzeichnis, gab dann ein virtualenv -p /usr/bin/python3.8 .venv
Das erzeugte dann das Verzeichnis .venv, wo dann auch Python 3.8 installiert wurde.
Nach .venv/bin/activate habe ich nun auch das venv Prompt im Terminal. Conda init aus der .bashrc habe ich entfernt. Die ./run.sh aus der Repo habe ich angepasst laut einem user seien die dortigen Angaben python3
zu ändern in python3.8 oder 3.9., Python 3 würde als Python 3.11 bzw. die aktuelle Version interpretiert.
Nun lief alles fehlerfrei durch die WebGui startet auch, mal sehen ob es auch funktioniert, wie es soll.
Jetzt wird bei Aktivierung der venv nach Eingabe python --version auch Version 3.8.18 angezeigt, so soll das sein.
 
Zuletzt bearbeitet:
Zurück
Oben