Sie sollten sich PEP 8 , den Style Guide für Python-Code, ansehen:
Paket- und Modulnamen Module sollten kurze Namen in Kleinbuchstaben haben. Unterstriche können im Modulnamen verwendet werden, wenn dies die Lesbarkeit verbessert. Python-Pakete sollten auch kurze Namen in Kleinbuchstaben enthalten, obwohl von der Verwendung von Unterstrichen abgeraten wird.
Da Modulnamen Dateinamen zugeordnet werden und bei einigen Dateisystemen die Groß- und Kleinschreibung nicht berücksichtigt wird und lange Namen abgeschnitten werden, ist es wichtig, dass die Modulnamen relativ kurz gewählt werden - dies ist unter Unix kein Problem, kann aber ein Problem sein Problem, wenn der Code zu älteren Mac- oder Windows-Versionen oder DOS transportiert wird.
Mit anderen Worten: Benennen Sie Ihre Datei um :)
ops-scripts
und wissen, dass sie nicht mit einem normalen Paket-Namespace-Ansatz importiert werden können. Oder ein einzelnes Skript könntestop-website.py
für einen ähnlichen Effekt benannt werden. Alle dieserunpy
Methoden können natürlich weiterhin über und einige andere Methoden importiert werden , dies hilft jedoch dabei, einige häufige Fehler zu vermeiden.cgi-bin
Ordner (mache Unitttests für sie), was ziemlich normal ist. Wenn Sie keinen seltenen Fall wie diesen haben, benennen Sie Ihr Modul definitiv um, wenn Sie die Kontrolle darüber haben.Eine andere Sache, die Sie in Ihrem Code beachten sollten, ist, dass der Import keine Funktion ist. So
import(python-code)
sollte es sein,import python-code
was, wie einige bereits erwähnt haben, als "Python minus Code importieren" interpretiert wird, nicht das, was Sie beabsichtigt haben. Wenn Sie wirklich eine Datei mit einem Bindestrich im Namen importieren müssen, können Sie Folgendes tun:Wie oben ebenfalls erwähnt, wird dies jedoch nicht wirklich empfohlen. Sie sollten den Dateinamen ändern, wenn Sie ihn steuern.
quelle
TLDR
Bindestriche sind nicht illegal, aber Sie sollten sie aus drei Gründen nicht verwenden:
Wenn Sie definitiv einen Dateinamen mit einem Bindestrich importieren müssen, lautet die spezielle Syntax wie folgt:
Neugierig, warum wir spezielle Syntax brauchen?
Der Grund für die spezielle Syntax ist, dass Sie beim Schreiben
import somename
ein Modulobjekt mit einem Bezeichner erstellensomename
(damit Sie es später mit zsomename.funcname
. ). Natürlichmodule-name
ist kein gültiger Bezeichner und daher die spezielle Syntax, die einen gültigen Bezeichner ergibt.Sie verstehen nicht, warum der Modulname keine gültige Kennung ist?
Mach dir keine Sorgen - ich auch nicht. Hier ist ein Tipp, der Ihnen helfen soll: Sehen Sie sich diese Python-Zeile an:
x=var1-var2
. Sehen Sie eine Subtraktion auf der rechten Seite der Zuweisung oder einen Variablennamen mit einem Bindestrich?PS
Meine Antwort enthält nichts Originelles, außer das, was ich als die relevantesten Informationen aus allen anderen Antworten an einem Ort angesehen habe
quelle
psycopg2_binary = import_module('psycopg2-binary')
. Fehler =>ModuleNotFoundError: No module named 'psycopg2-binary'
. Istpsycopg2-binary
aber installiert. Keine Ahnung, wie man es einbindet.Das Problem ist, dass
python-code
es sich nicht um eine Kennung handelt. Der Parser sieht dies alspython
Minuscode
. Natürlich wird dies nicht das tun, was Sie verlangen. Sie müssen einen Dateinamen verwenden, der auch eine gültige Python-ID ist. Versuchen Sie, das-
durch einen Unterstrich zu ersetzen .quelle
Sie könnten es wahrscheinlich durch einen
__import__
Hack importieren , aber wenn Sie noch nicht wissen wie, sollten Sie es nicht tun. Python-Modulnamen sollten gültige Variablennamen ("Bezeichner") sein. Wenn Sie also ein Modul habenfoo_bar
, können Sie es in Python (print foo_bar
) verwenden. Mit einem seltsamen Namen (print foo-bar
-> Syntaxfehler) wäre dies nicht möglich .quelle
Verwenden Sie unter Python 3 import_module :
Allgemeiner,
quelle
Obwohl die richtige Benennung von Dateien der beste Weg ist,
python-code
ist eine Hack-Verwendung__import__
besser, als den Code anderer Autoren zu kopieren, umzubenennen oder auf andere Weise herumzuspielen , wenn er nicht unter unserer Kontrolle steht . Ich habe es jedoch versucht und es hat nicht funktioniert, es sei denn, ich habe die Datei umbenannt und die.py
Erweiterung hinzugefügt . Nachdem ich mir das Dokument angesehen hatte , um eine Beschreibung für zu erhalten.py
, kam ich zu folgendem Ergebnis:Beim
python-codec
ersten Durchlauf wurde eine neue Datei erstellt .quelle