Raz*_*zer 89 python import module subdirectory
我想将子文件夹导入为模块.因此每个子文件夹都包含一个__init__.py.我的文件夹结构是这样的:
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
Run Code Online (Sandbox Code Playgroud)
在我的主脚本中我导入
from dirFoo.foofactory import FooFactory
Run Code Online (Sandbox Code Playgroud)
在这个工厂文件中,我包含子模块:
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2
Run Code Online (Sandbox Code Playgroud)
如果我调用我的foofactory我得到错误,那python无法导入子模块foo1和foo2:
Traceback (most recent call last):
File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module>
from dirFoo1.foo1 import Foo1
ImportError: No module named dirFoo1.foo1
Run Code Online (Sandbox Code Playgroud)
Rob*_*ers 116
没有必要弄乱你PYTHONPATH或sys.path这里.
要在包中正确使用绝对导入,您还应该包含"root"包名,例如:
from dirFoo.dirFoo1.foo1 import Foo1
from dirFoo.dirFoo2.foo2 import Foo2
Run Code Online (Sandbox Code Playgroud)
或者您可以使用相对导入:
from .dirfoo1.foo1 import Foo1
from .dirfoo1.foo1 import Foo2
Run Code Online (Sandbox Code Playgroud)
Viv*_*k22 20
只是在这里通知.(来自newbee,keviv22)
永远不要为了您自己的利益而将文件夹或文件命名为空格或符号,如" - "或"_".如果你这样做,你可能会面临一些问题.比如说,虽然您的导入命令是正确的,但您无法成功导入这些命名文件夹中可用的所需文件.
无效的文件夹命名如下:
上面的有效文件夹命名:
我做了什么错:
考虑文件结构.
Parent
. __init__.py
. Setup
.. __init__.py
.. Generic-Class-Folder
... __init__.py
... targetClass.py
. Check
.. __init__.py
.. testFile.py
Run Code Online (Sandbox Code Playgroud)
我想做什么?
我做了什么命令?
尝试了很多搜索并查看了许多stackoverflow问题,无法确定出现了什么问题.我多次交叉检查我的文件,我使用from Core.Generic-Class-Folder.targetClass import functionExecute文件,插入环境路径,并非常担心出了什么问题......
经过很长一段时间,我在与我的一个朋友交谈时想到了这一点.使用这样的命名约定我很愚蠢.我永远不应该使用空格或特殊符号来定义任何文件夹或文件的名称.所以,这就是我想传达的.祝你有美好的一天!
(对不起这个巨大的帖子...只是让我的挫折去.... :)谢谢!)
假设您的项目是这样构建的:
+---MyPythonProject
| +---.gitignore
| +---run.py
| | +---subscripts
| | | +---script_one.py
| | | +---script_two.py
Run Code Online (Sandbox Code Playgroud)
在里面run.py,您可以通过以下方式导入脚本一和二:
from subscripts import script_one as One
from subscripts import script_two as Two
Run Code Online (Sandbox Code Playgroud)
现在,仍然在里面run.py,您将能够使用以下命令调用他们的方法:
One.method_from_one(param)
Two.method_from_two(other_param)
Run Code Online (Sandbox Code Playgroud)
设置您的PYTHONPATH环境变量。例如这样的PYTHONPATH =。:..(对于* nix系列)。
您也可以手动将当前目录(在您的情况下为src)添加到pythonpath中:
import os
import sys
sys.path.insert(0, os.getcwd())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112456 次 |
| 最近记录: |