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
It's possible since Python 3.1+, see Julien's answer.
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
# contents of 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 = importlib.import_module("neat-python")
# to then call "mymodule" in neat
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.
sys.path.append('**whole path to module**') # /C:/bi-etl/utils/ for example
Most Pythonic Way to Interleave Two Strings
How to Read File with Space Separated Values in Pandas
Why Do Many Examples Use 'Fig, Ax = Plt.Subplots()' in Matplotlib/Pyplot/Python
Executing Command Line Programs from Within Python
Sql-Like Window Functions in Pandas: Row Numbering in Python Pandas Dataframe
Comparing Two .Txt Files Using Difflib in Python
Upgrade Python in a Virtualenv
How to Create Downloading Progress Bar in Ttk
Getting the Indices of Several Elements in a Numpy Array at Once
Efficient Way to Add Spaces Between Characters in a String
Send Data from a Textbox into Flask
Getting the Index of a Row in a Pandas Apply Function
How to Remove the Space Between Subplots in Matplotlib.Pyplot
How Do Python Functions Handle the Types of Parameters That You Pass In
Scikit-Learn Dbscan Memory Usage