IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Je n'arrive pas a comprendre comment importer des modules (Classes ou fonction)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 18
    Par défaut Je n'arrive pas a comprendre comment importer des modules (Classes ou fonction)
    Bonjour à tous, je n'arrive pas à comprendre comment importer des modules (Classes ou fonction) avec python (je suis sur windows)

    C:.
    ├───scrapers
    └───scrape_linkedin
        ├───data
        ├───logs
        │   ├───scrape_companies_logs
        │   └───scrape_jobs_logs     
        ├───scrape_companies
        │   └───selenium
        │       └───__pycache__      
        └───scrape_jobs
            ├───mechanize
            ├───pyppeteer
            └───selenium
    je vous donne ci-dessus l'arborescence de mon projet, scrapers est un package contenant une superclasse nommée SeleniumScraper() pour l'importer dans le dossier scrape_companies/selenium/scraper_companies.py je fais comment ? Où dois-je mettre des __init__.py pour que cela fonctionne ? J'ai essayé cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from ....scrapers.selenium_scraper import SeleniumScraper
    qui me renvoie cette erreur
    'attempted relative import with no known parent package'
    où j'ai essayé cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from scrapers.selenium_scraper import SeleniumScraper
    qui me donne :
    'No module named 'scrapers'
    Merci d'avance pour toutes aides.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 744
    Par défaut
    Salut,

    Par défaut, "import scrapers" suppose qu'il existe un sous-répertoire "scrapers".
    Ce sous-répertoire est relatif au répertoire du programme principal (le "main").

    Sinon Python va le chercher dans le sys.path (qu'on peut "modifier").

    Pour les détails vous avez le chapitre sur les modules et les packages du Python tutorial.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Salut
    Citation Envoyé par Modaak Voir le message
    ou dois-je mettre des __init__.py pour que cela fonctionne ?
    Le __init__.py sert à rendre un dossier importable. Si tu as un dossier "toto", il faut que ce dossier contienne un fichier "__init__.py" et dans ce cas seulement tu peux faire import toto. Sinon tu ne peux pas.
    Mais cela ne t'empêche pas de pouvoir faire quand-même from toto import un_programme_qui_s_y_trouve. Le __init__.py sert juste à dire "j'importe le dossier directement".

    Citation Envoyé par Modaak Voir le message
    je n'arrive pas a comprendre comment importer des modules (Classes ou fonction) avec python
    Ce qu'il faut comprendre, c'est que l'import se fait à partir de l'emplacement du programme que tu exécutes.
    Donc si on prend l'arborescence suivante
    C:.
    ├───prog.py
    └───dossierA
    │      └───A.py
    ├───dossierB
    │      └───B.py
    │      └───dossierBA
    │              └───BA.py
    └───dossierC
             └───C.py
    On part du principe que le programme de base c'est "prog.py". Tu peux alors demander from dossierA import A, from dossierB import B, from dossierB.dossierBA import BA et from dossierC import C.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 744
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Le __init__.py sert à rendre un dossier importable. Si tu as un dossier "toto", il faut que ce dossier contienne un fichier "__init__.py" et dans ce cas seulement tu peux faire import toto. Sinon tu ne peux pas.
    Le monde est devenu plus compliqué depuis la version 3.3+ (et le PEP 420).
    Plus besoin d'__init__.py pour qu'import marche... et la subtile différence entre les packages réguliers (qui ont un __init__.py) et les packages "namespace".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Plus besoin d'__init__.py pour qu'import marche...
    Oui tu as raison. Hier j'ai supprimé le __init__.py mais j'ai quand-même réussi à importer les scripts qui se trouvaient dans les sous-dossiers. C'est à cause de ça que j'ai écrit "Mais cela ne t'empêche pas de pouvoir faire quand-même..."
    Toutefois le __init__ reste utile pour lui mettre des directives d'import. Si par exemple dans dossierC je crée un __init__.py qui contient from dossierC import C je peux alors écrire directement dans mon programme import dossierC sans préciser spécifiquement quel fichier importer.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 744
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Toutefois le __init__ reste utile pour lui mettre des directives d'import.
    Certes mais quel rapport avec les soucis rencontrés par le PO?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Certes mais quel rapport avec les soucis rencontrés par le PO?
    Il a commencé avec "je n'arrive pas à comprendre comment..." donc j'espère que ces détails l'éclaireront sur comment on peut importer des trucs.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Problème un peu bête mais j'arrive pas a comprendre.
    Par mckilleron dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/09/2010, 11h33
  2. Une erreur que j'arrive pas a comprendre
    Par olifile dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/05/2007, 13h41
  3. Réponses: 3
    Dernier message: 13/05/2006, 18h31
  4. Réponses: 7
    Dernier message: 23/01/2006, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo