3 ms·
People have a script run with python, and want to use code in other files. This is not supported in python. For reasons beyond my understanding, you are suppos
by rocqua 5y ago
People have a script run with python, and want to use code in other files.
This is not supported in python. For reasons beyond my understanding, you are supposed to put the script with python, or with the shebang, in a different directory.
Alternatively, you can always use `python -m` to run your code.
- blakesley 5y ago> People have a script run with python, and want to use code in other files. This is not supported in python. Come again? This is what "import" does, obviously. This is not a clear explanation of your problem.
- rocqua 5y agoI missed one detail. The files and the script are in the same folder. I say script here because the apparent intention is that scripts and modules are separate. That is why it's not easy to import functions from a file in the same directory as a script. This restriction is very unexpected. And it is not borne out well by the fact that it is not obvious this distinction exists.
- formerly_proven 5y agoWhen you run a script, the directory containing it is on the path. You can just write "from somefile import something". What you can't do is "from .somefile import something" because it is not a package. When you run a module, the root package containing it is on the path by definition and imports work.
- rocqua 5y agoI didn't know that. Does that still work if you call the script from a different directory (so `python bar/foo.py`)? Imma guess it doesn't work with symlinked scripts. But I don't think it should without doing an install, in which case a module does make sense.
- formerly_proven 5y agoThe directory containing the file is added to the path, and the named file is imported as the __main__ module. That's why "if __name__ == '__main__':" works in script files. I don't think Python will resolve symlinks here, so if that needs to work, you probably need to do it yourself before touching other code / files.