[Python] Que faire en cas de violation de PEP8 lors du processus d'importation à partir du répertoire ajouté à sys.path

La version de Python que j'utilise est la 3.6.

Si vous trouvez des erreurs, veuillez nous en informer dans les commentaires.

Violation de PEP8

Supposons que vous souhaitiez charger vos propres modules sous `lib``` à partir de `scripts / execute.py``` avec une telle structure de répertoires.

.
├──scripts
│   └── execute.py
└──lib
    └── my_module.py

Au départ, j'ai écrit execute.py comme suit et j'ai essayé de le gérer en ajoutant un fichier à sys.path```.

import pandas as pd
import sys
sys.path.append('../lib')
import my_module

# (Ce qui suit est omis)

Cependant, il s'agit du standard de codage Python PEP8 ([traduction japonaise](https: //pep8-ja.readthedocs. io / ja / latest / #)) est violé, donc si vous utilisez flake8 etc., le Tsukkomi suivant sera entré.

E402 module level import not at top of file

Citons la partie pertinente de la traduction japonaise.

L'instruction import doit toujours être placée au début du fichier, immédiatement après le commentaire du module ou la docstring, et avant la variable globale ou la définition de la constante du module.

Résolu en définissant la variable d'environnement PYTHONPATH

Juste j'avais une question sur le même effet sur Stackoverflow.

Plusieurs méthodes ont été répondues à ce sujet, et la méthode d'ajout du répertoire à la variable d'environnement `` PYTHONPATH '' semble être la solution essentielle. (Le lien suivant a été introduit)

(Bien que les méthodes suivantes aient également été introduites, honnêtement, cela me semble être un hack rusé.)

De plus, le site de questions japonais teratail avait des réponses à des questions similaires. La réponse vient de M. Shimizukawa, un committer du Sphinx, elle semble donc hautement crédible.

L'ajustement de sys.path dans le script n'est pas recommandé. Si le répertoire dans lequel vous souhaitez utiliser la bibliothèque est fixé à divers endroits et que vous souhaitez importer cette bibliothèque, il existe un moyen de définir la variable d'environnement PYTHONPATH.

J'ai donc ajouté le répertoire lib '' à PYTHONPATH et je l'ai traité. Si vous l'utilisez à chaque fois, écrivez-le dans `` bash_profile```.

export PYTHONPATH="${PYTHONPATH}:/chemin complet du répertoire lib/lib"

Cela nous a permis de supprimer la description associée `` sys.path``` de `ʻexecute.py```.

import pandas as pd

import my_module

# (Ce qui suit est omis)

À propos de la variable d'environnement PYTHONPATH

Ce n'est pas le sujet principal, mais j'étais curieux de savoir ce qui se passerait si le nom de la bibliothèque et le nom de mon propre module étaient au bâton.

Dans ce cas, lisez le document officiel. Il y a la description suivante dans le tutoriel officiel Python.

Lors de l'importation d'un module nommé spam, l'interpréteur recherche d'abord un module intégré portant ce nom. S'il n'est pas trouvé, recherchez un fichier nommé spam.py dans la liste des répertoires de sys.path. sys.path est initialisé à l'emplacement suivant:

  • Le répertoire contenant le script saisi (ou le répertoire courant si aucun fichier n'est spécifié).

Apparemment, celui de PYTHONPATH a la priorité. Même quand je l'ai essayé, ça s'est comporté comme ça.

Recommended Posts

[Python] Que faire en cas de violation de PEP8 lors du processus d'importation à partir du répertoire ajouté à sys.path
Que faire lorsque le type de valeur est ambigu en Python?
Que faire si la barre de progression n'est pas affichée dans tqdm de python
Que faire lorsque l'avertissement "L'environnement est cohérent ..." apparaît dans l'environnement Anaconda
Que faire si vous obtenez `locale.Error: unsupported locale setting` lors de l'obtention de la date du jour en Python
Que faire lorsque [Errno 2] Aucun fichier ou répertoire de ce type n'apparaît en Python
Pour faire l'équivalent de Ruby ObjectSpace._id2ref en Python
Que faire quand n'est pas dans le fichier sudoers. Cet incident sera signalé.
Que faire lorsque seule la fenêtre est affichée et que rien ne s'affiche dans le pygame
Que faire si vous obtenez une erreur lors de l'importation de matplotlib en Python (Mac)
Que faire lorsque Python ne passe pas de la version système dans pyenv
Que faire lorsque "SSL: CERTIFICATE_VERIFY_FAILED _ssl.c: 1056" apparaît en Python
Que faire si «Sans nom: 0» est ajouté dans to_csv-> read_csv des pandas
Que faire lorsque ModuleNotFoundError: Aucun module nommé'XXX 'ne se produit en Python
Écrivez un script dans Shell et Python pour vous avertir dans Slack lorsque le processus est terminé
Que faire lorsqu'une partie de l'image d'arrière-plan devient transparente lorsque l'image transparente est combinée avec Oreiller
NameError: le nom global'dot_parser 'n'est pas défini et que faire quand il apparaît en python
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
Que faire s'il y a un décimal dans python json .dumps
[Python] Que faire lorsqu'une erreur liée à l'authentification SSL est renvoyée
Quel genre de livre est le "Python Crash Course" le plus vendu au monde?
[Introduction à Python] Quelle est la méthode de répétition avec l'instruction continue?
Que faire lorsqu'un message d'avertissement est affiché dans la liste des pip
Que faire lorsque "Quelque chose est déjà en cours d'exécution sur le port 8000" s'affiche lorsque la commande de développement de Gatsby est exécutée.
Comment écrire quoi faire lorsque l'application est affichée pour la première fois dans Qt pour Python avec Designer
Exemple de ce qu'il faut faire lorsque l'exemple de script ne fonctionne pas (OpenCV-Python)
Qu'est-ce que wheezy dans l'image Docker Python?
Que faire lorsqu'un avertissement apparaît autour de l'intégration de Python dans CheckHealth de Neovim
Que faire si vous obtenez l'erreur RuntimeError: Python n'est pas installé en tant que framework lorsque vous essayez d'utiliser matplitlib et pylab dans Python 3.3
Que faire quand une PermissionError dans tempfile.mkstemp se produit
Que faire si l'abandon s'affiche lors de la saisie d'une vidéo de caméra dans OpenCV
Ce que j'ai fait lors de la mise à jour de Python 2.6 vers 2.7
Que faire lorsque le graphique n'apparaît pas sur le notebook Jupyter (IPython)
Que faire pour obtenir une feuille de calcul Google en Python
Que faire si (base) est affiché au début du terminal Mac
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Python] Erreur de type: l'objet 'WebElement' n'est pas itérable Que faire lorsqu'une erreur se produit
[Python] Que faire quand Aucun module nommé "pyproj.datadir" n'apparaît lors de la création d'Exe avec PyInstaller
Que faire si la commande d'impression elle-même provoque une erreur dans le python de Maya
Que faire si vous ne voyez pas IntelliSense de Python dans VS Code sous Windows
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
[Introduction à Python] Quel est l'important "if __name__ == '__ main__':" lorsqu'il s'agit de modules?
Que faire lorsque l'imitation est intégrée à Python
Le mur lors du passage du service Django de Python 2.7 à la série Python 3
[Go 1.13] Que faire lorsque la disposition de répertoire inattendue: apparaît
[openpyxl] Que faire lorsque IllegalCharacterError apparaît dans pandas.DataFrame.to_excel
curl: (60) Que faire lorsque le certificat de l'émetteur n'est pas valide.
Comment obtenir le nombre de chiffres en Python
Comment connaître le répertoire actuel en Python dans Blender
Trouvez la partie 575 de Wikipedia en Python
Que faire lorsque "impossible d'importer le nom xxx" [Python]
Je veux faire quelque chose avec Python à la fin
Notez ce que vous voulez faire à l'avenir avec Razpai