Modulo Python con un trattino o un trattino (-) nel nome


92

Ho un modulo Python esistente con un trattino nel nome, foo-bar.py

Cambiare il nome del modulo è qualcosa che preferirei evitare poiché il modulo è condiviso, e dovrei cercare tutti i posti in cui viene utilizzato in modo che il mio caso speciale funzioni.

C'è un modo per caricare un modulo il cui nome contiene il tipico "-" proibito?

(Capisco che questa non sia una best practice. Ma per questa situazione preferirei non riprogettare e testare una serie molto più ampia di applicazioni. Inoltre non penso che i miei master aziendali approverebbero il mio tempo per l'implementazione un tale cambiamento.)


5
Non puoi semplicemente fare una ricerca nei file nel tuo IDE e sostituire tutti i foo-bars con foobaro altro? Quanto è difficile?
agf


2
Questa risposta, in particolare: stackoverflow.com/questions/761519/...
Benh

agf Risposta breve: non è tutto il mio codice.
Salta Huffman

S.Lott gli altri utenti sono applicazioni commerciali. Ecco come so che è possibile.
Salta Huffman,

Risposte:


98

Puoi farlo usando __import__(). Per esempio:

foobar = __import__("foo-bar")

Ma dovresti davvero rinominare il modulo invece. In questo modo è possibile evitare confusione in cui il nome del file del modulo è diverso dall'identificatore utilizzato nel programma.


4
Grazie. Capisco che le convenzioni dovrebbero essere seguite ovunque sia pratico. Solleverò questo problema specifico durante una revisione del codice dipartimentale.
Salta Huffman,

57

So che a questa domanda è già stata data una risposta soddisfacente al richiedente, ma ecco un'altra risposta che ritengo abbia qualche merito prima dell'utilizzo __import__().

import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()

Secondo i documenti:

"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 + solo


5
Stavo cercando come farlo e la tua risposta si applica meglio alla mia situazione rispetto alla risposta precedente. È sempre bene se vedi una risposta distinta a quella già esistente per aggiungerla come nuova risposta in modo che le persone in una posizione come me possano trovare tutte le informazioni rilevanti in un unico posto.
Davy M

0

Prova a usare il trattino basso invece di un trattino.

importa pymysql_utils

ha funzionato per me anche se import pymysql-utils era il nome del modulo usato da pip

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.