简体   繁体   中英

Python module with a dash, or hyphen (-) in its name

I have an existing python module with a dash in its name, foo-bar.py

Changing the module name is something I would prefer to avoid as the module is shared, and I would have to chase down all the places it is used so that my special case will work.

Is there a way to load a module whose name contains the typically forbidden '-'?

(I do understand that this isn't a best practice. But for this situation I would prefer not to redesign and test a much larger set of applications. Also I don't think my corporate masters would approve of my taking the time to implement such a change.)

You can do that using __import__() . For example:

foobar = __import__("foo-bar")

But you really should rename the module instead. That way you can avoid confusion where the filename of the module is different from the identifier used in the program.

I know this question has already been answered to satisfaction of the asker, but here is another answer which I believes has some merit above using __import__() .

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

According to the docs:

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

Try using underscore instead of a hyphen.

import pymysql_utils

worked for me even though import pymysql-utils was the name of the module used by pip

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM