Zasadniczo, gdy mam plik Pythona, taki jak:
python-code.py
I użyć:
import (python-code)
interpreter podaje mi błąd składniowy.
Jakieś pomysły, jak to naprawić? Czy myślniki są niedozwolone w nazwach plików Pythona?
Powinieneś sprawdzić PEP 8 , przewodnik po stylu dla kodu w języku Python:
Nazwy pakietów i modułów Moduły powinny mieć krótkie nazwy składające się wyłącznie z małych liter. Podkreślenia mogą być używane w nazwie modułu, jeśli poprawia to czytelność. Pakiety Pythona powinny również mieć krótkie nazwy składające się wyłącznie z małych liter, chociaż odradza się stosowanie podkreślenia.
Ponieważ nazwy modułów są mapowane na nazwy plików, a niektóre systemy plików nie uwzględniają wielkości liter i obcinają długie nazwy, ważne jest, aby nazwy modułów były dość krótkie - nie będzie to problem w systemie Unix, ale może to być problem, gdy kod jest transportowany do starszych wersji Mac, Windows lub DOS.
Innymi słowy: zmień nazwę pliku :)
ops-scripts
i wiedzieć, że nie można ich zaimportować przy użyciu normalnego podejścia do przestrzeni nazw pakietu. Można też nazwać pojedynczy skryptstop-website.py
dla podobnego efektu. Każdy z nich można nadal importować przy użyciurunpy
i innych metod, ale pomaga to uniknąć niektórych typowych błędów.cgi-bin
folderze (robię na nich unitttesty), co jest dość standardowym afaikiem. Jeśli nie masz tak rzadkiego przypadku, zdecydowanie zmień nazwę modułu, jeśli masz nad nim kontrolę.Inną rzeczą, na którą należy zwrócić uwagę w kodzie, jest to, że import nie jest funkcją. Więc
import(python-code)
powinno być to,import python-code
co, jak niektórzy już wspominali, jest interpretowane jako „import pythona bez kodu”, a nie to, co zamierzałeś. Jeśli naprawdę potrzebujesz zaimportować plik z myślnikiem w nazwie, możesz wykonać następujące czynności:Ale, jak wspomniano powyżej, nie jest to zalecane. Powinieneś zmienić nazwę pliku, jeśli jest to coś, co kontrolujesz.
źródło
TLDR
Kreski nie są nielegalne, ale nie powinieneś ich używać z 3 powodów:
Jeśli zdecydowanie musisz zaimportować nazwę pliku z myślnikiem, specjalna składnia jest następująca:
Ciekawi Cię, dlaczego potrzebujemy specjalnej składni?
Powodem specjalnej składni jest to, że kiedy piszesz
import somename
, tworzysz obiekt modułu z identyfikatoremsomename
(więc możesz go później użyć npsomename.funcname
.). Oczywiściemodule-name
nie jest to poprawny identyfikator, stąd specjalna składnia, która daje prawidłowy identyfikator.Nie rozumiesz, dlaczego nazwa modułu nie jest prawidłowym identyfikatorem?
Nie martw się - ja też nie. Oto wskazówka, aby pomóc: Spójrz na tej linii Pythona:
x=var1-var2
. Czy widzisz odejmowanie po prawej stronie przypisania lub nazwę zmiennej z myślnikiem?PS
W mojej odpowiedzi nie ma nic oryginalnego, z wyjątkiem umieszczenia w jednym miejscu tego, co uważam za najbardziej odpowiednie fragmenty informacji ze wszystkich innych odpowiedzi
źródło
psycopg2_binary = import_module('psycopg2-binary')
. Błąd =>ModuleNotFoundError: No module named 'psycopg2-binary'
. Alepsycopg2-binary
jest zainstalowany. Nie mam pojęcia, jak to uwzględnić.Problem w tym, że
python-code
nie jest to identyfikator. Parser widzi to jakopython
minuscode
. Oczywiście to nie zrobi tego, o co prosisz. Będziesz musiał użyć nazwy pliku, która jest również prawidłowym identyfikatorem Pythona. Spróbuj zastąpić-
znak podkreśleniem.źródło
Prawdopodobnie mógł zaimportować go przez jakiś
__import__
hack, ale jeśli jeszcze nie wiem jak, nie należy. Nazwy modułów w Pythonie powinny być poprawnymi nazwami zmiennych („identyfikatorami”) - oznacza to, że jeśli masz modułfoo_bar
, możesz go używać z poziomu Python (print foo_bar
). Nie byłbyś w stanie tego zrobić z dziwną nazwą (print foo-bar
-> błąd składni).źródło
W Pythonie 3 użyj import_module :
Bardziej ogólnie,
źródło
Chociaż prawidłowe nazewnictwo plików jest najlepszym rozwiązaniem, jeśli
python-code
nie jest to pod naszą kontrolą, hackowanie__import__
jest lepsze niż kopiowanie, zmiana nazwy lub inne manipulowanie kodem innych autorów. Jednak spróbowałem i nie zadziałało, chyba że zmieniłem nazwę pliku, dodając.py
rozszerzenie. Po przejrzeniu dokumentu w celu uzyskania opisu.py
, skończyło się na tym:Utworzył nowy plik
python-codec
przy pierwszym uruchomieniu.źródło