Python Module with a Dash, or Hyphen (-) in Its Name

How to import module when module name has a '-' dash or hyphen in it?

In Python 2, you can't. foo-bar is not an identifier. rename the file to foo_bar.py


It's possible since Python 3.1+, see Julien's answer.


If import is not your goal (as in: you don't care what happens with sys.modules, you don't need it to import itself), just getting all of the file's globals into your own scope, you can use execfile

# contents of foo-bar.py
baz = 'quux'
>>> execfile('foo-bar.py')
>>> baz
'quux'
>>>

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

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.

Is it ok to use dashes in Python files when trying to import them?

You should check out PEP 8, the Style Guide for Python Code:

Package and Module Names Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged.

Since module names are mapped to file names, and some file systems are case insensitive and truncate long names, it is important that module names be chosen to be fairly short -- this won't be a problem on Unix, but it may be a problem when the code is transported to older Mac or Windows versions, or DOS.

In other words: rename your file :)

How do I import modules that have '-' within the module name in python 3

First, it doesn't look like Instabot.py is actually designed to be imported. I haven't found anything in its docs suggesting manual imports are a supported name.

The name on PyPI has a hyphen in it, but that's not the name you have to import (assuming importing it actually works). The name on PyPI can be completely different from the name you have to import. In this case, the name you import is instabot_py, with an underscore.

In general, people who know what they're doing don't make modules with hyphens in the name, because such names are incompatible with the import statement. This program's author picked an underscore instead, a common choice.

I can't import a library because of a dash in Python

You can't. Take a look at this solution. You would need to rename the module with an underscore.

In your case, the python-binance library doesn't need to be imported like that. All you need to do is import the client like this:

from binance.client import Client
client = Client(api_key, api_secret)

How import package from PyPI with hyphen in name?

Starting in python3.x you can use importlib for some generic module that actually installs with a hyphen in the name. I will use neat-python as an example even though I have been informed that it actually installs as neat:

--myscript.py--

import importlib
neat = importlib.import_module("neat-python")
# to then call "mymodule" in neat
neat.mymodule(someobject)

Import python module from another folder, with main directory having a -

Perhaps not the most graceful solution but I have found one using the sys library.

I added the module to the path, then used import statement for the module name.

An example:

import sys
sys.path.append('**whole path to module**') # /C:/bi-etl/utils/ for example
import file_a


Related Topics



Leave a reply



Submit