Mam istniejący moduł Pythona z myślnikiem w nazwie, foo-bar.py
Zmiana nazwy modułu jest czymś, czego wolałbym uniknąć, ponieważ moduł jest udostępniany, i musiałbym ścigać wszystkie miejsca, w których jest używany, aby mój specjalny przypadek zadziałał.
Czy istnieje sposób, aby załadować moduł, którego nazwa zawiera zwykle zabronione „-”?
(Rozumiem, że to nie jest najlepsza praktyka. Ale w tej sytuacji wolałbym nie przeprojektowywać i testować znacznie większego zestawu aplikacji. Nie sądzę też, aby moi mistrzowie korporacji pochwalili mój czas na wdrożenie taka zmiana.)
foo-bar
szfoobar
lub cokolwiek? Czy to jest trudne?Odpowiedzi:
Możesz to zrobić za pomocą
__import__()
. Na przykład:foobar = __import__("foo-bar")
Ale naprawdę powinieneś zmienić nazwę modułu. W ten sposób można uniknąć nieporozumień, gdy nazwa pliku modułu różni się od identyfikatora używanego w programie.
źródło
Wiem, że odpowiedź na to pytanie była już satysfakcjonująca dla pytającego, ale tutaj jest inna odpowiedź, która moim zdaniem ma pewną zaletę powyżej użycia
__import__()
.import importlib mod = importlib.import_module("path.to.my-module") # mod.yourmethod()
Według dokumentów:
"This provides an implementation of import which is portable to any Python interpreter. This also provides an implementation which is easier to comprehend than one implemented in a programming language other than Python."
Python 2.7
Tylko +źródło
Spróbuj użyć podkreślenia zamiast łącznika.
import pymysql_utils
zadziałało dla mnie, mimo że import pymysql-utils to nazwa modułu używanego przez pip
źródło