Maison > développement back-end > Tutoriel Python > Comment puis-je éviter les piratages de « sys.path » lors de l'importation de packages frères et sœurs en Python ?

Comment puis-je éviter les piratages de « sys.path » lors de l'importation de packages frères et sœurs en Python ?

Patricia Arquette
Libérer: 2024-12-11 13:56:10
original
177 Les gens l'ont consulté

How Can I Avoid `sys.path` Hacks When Importing Sibling Packages in Python?

Importations de packages frères et sœurs : une approche indolore

Lorsque vous traitez des importations Python, rencontrer des problèmes d'importation de packages frères et sœurs peut être frustrant. Explorons une alternative au redoutable hack sys.path.insert pour résoudre ce problème.

Configuration du projet

Considérez la structure de projet suivante :

├── LICENSE.md
├── README.md
├── api
│   ├── __init__.py
│   ├── api.py
│   └── api_key.py
├── examples
│   ├── __init__.py
│   ├── example_one.py
│   └── example_two.py
└── tests
│   ├── __init__.py
│   └── test_one.py
Copier après la connexion

Le Problème

Lorsque vous essayez d'importer depuis le module API dans les répertoires d'exemples et de tests, vous pouvez rencontrer une erreur du type :

ModuleNotFoundError: No module named 'api'
Copier après la connexion

La solution< /h2>

Au lieu de recourir aux hacks sys.path, voici un Pythonic solution :

Étape 1 : Créer un fichier pyproject.toml

[project]
name = "myproject"
version = "0.1.0"
description = "My small project"

[build-system]
requires = ["flit_core >=3.2,<4"]
build-backend = "flit_core.buildapi"
Copier après la connexion

Étape 2 : Installer avec pip -e

Activez votre environnement virtuel si besoin, puis installez votre projet en modifiable state :

pip install -e .
Copier après la connexion

Étape 3 : Ajuster les importations

Modifier les importations dans les fichiers qui ne pouvaient auparavant pas être importés depuis le module API pour inclure le nom du projet, par exemple :

from myproject.api.api import function_from_api
Copier après la connexion

Exemple

a pi.py

def function_from_api():
    return 'I am the return value from api.api!'
Copier après la connexion

test_one.py

from myproject.api.api import function_from_api

def test_function():
    print(function_from_api())

if __name__ == '__main__':
    test_function()
Copier après la connexion

En cours d'exécution le test

Assurez-vous que vous êtes toujours dans votre environnement virtuel et exécutez ce qui suit :

python .\myproject\tests\test_one.py
Copier après la connexion

Sortie :

I am the return value from api.api!
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal