Basically when I have a python file like:
the interpreter gives me syntax error.
Any ideas on how to fix it? Are dashes illegal in python file names?
The problem is that
python-code is not an identifier. The parser sees this as
code. Of course this won’t do what you’re asking. You will need to use a filename that is also a valid python identifier. Try replacing the
- with an underscore.
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 🙂
You could probably import it through some
__import__ hack, but if you don’t already know how, you shouldn’t. Python module names should be valid variable names (“identifiers”) — that means if you have a module
foo_bar, you can use it from within Python (
print foo_bar). You wouldn’t be able to do so with a weird name (
print foo-bar -> syntax error).
One other thing to note in your code is that import is not a function. So
import(python-code) should be
import python-code which, as some have already mentioned, is interpreted as “import python minus code”, not what you intended. If you really need to import a file with a dash in its name, you can do the following::
python_code = __import__('python-code')
But, as also mentioned above, this is not really recommended. You should change the filename if it’s something you control.
Dashes are not illegal but you should not use them for 3 reasons:
If you definitely need to import a file name with a dash the special syntax is this:
module_name = __import__('module-name')
Curious about why we need special syntax?
The reason for the special syntax is that when you write
import somename you’re creating a module object with identifier
somename (so you can later use it with e.g.
somename.funcname). Of course
module-name is not a valid identifier and hence the special syntax that gives a valid one.
You don’t get why module-name is not valid identifier?
Don’t worry — I didn’t either. Here’s a tip to help you: Look at this python line:
x=var1-var2. Do you see a subtraction on the right side of the assignment or a variable name with a dash?
Nothing original in my answer except including what I considered to be the most relevant bits of information from all other answers in one place
Although proper file naming is the best course, if
python-code is not under our control, a hack using
__import__ is better than copying, renaming, or otherwise messing around with other authors’ code. However, I tried and it didn’t work unless I renamed the file adding the
.py extension. After looking at the doc to derive how to get a description for
.py, I ended up with this:
import imp try: python_code_file = open("python-code") python_code = imp.load_module('python_code', python_code_file, './python-code', ('.py', 'U', 1)) finally: python_code_file.close()
It created a new file
python-codec on the first run.
On Python 3 use import_module:
from importlib import import_module python_code = import_module('python-code')