我的家庭项目文件夹中具有以下目录结构。
|ALL-IN-ONE
|demo
|__init__.py
|__main__.py
|models
|grpc
|allinone_server.py
我想从allinone_server.py导入在 main .py中定义的名为images_demo的函数。我尝试过
from demo.__main__ import images_demo
它不起作用。如何导入?我尝试导入的功能位于演示目录内的 main .py内部。我正在尝试从grpc中的文件allinone_server.py导入它。我想我已经把问题弄清楚了。 这是项目的整个树
├── demo
│ ├── __init__.py
│ ├── __main__.py
│ └── __pycache__
│ ├── __init__.cpython-36.pyc
│ └── main.cpython-36.pyc
├── description
├── environment.yml
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ └── update.sample
├── imgs
│ └── 44.jpg
├── info
│ └── exclude
├── __init__.py
├── loggers
│ ├── __init__.py
│ └── __pycache__
│ └── __init__.cpython-36.pyc
├── models
│ ├── adience_large1.h5
│ ├── adience_small1.h5
│ ├── AgeModel.json
│ ├── detection_age_gender_large1.h5
│ ├── detection_age_gender_small1.h5
│ ├── detection_age_gender_smile_large1.h5
│ ├── detection_age_gender_smile_small1.h5
│ ├── detection_age_large1.h5
│ ├── detection_age_small1.h5
│ ├── detection_large1.h5
│ ├── detection_small1.h5
│ ├── grpc
│ │ ├── adele_2016.jpg
│ │ ├── allinone_client.py
│ │ ├── all_in_one_pb2_grpc.py
│ │ ├── all_in_one_pb2.py
│ │ ├── all_in_one.proto
│ │ ├── allinone_server.py
│ │ ├── benedict_cumberbatch_2014.png
│ │ ├── cat.png
│ │ ├── classroom_in_tanzania.jpg
│ │ ├── decoded1.py
│ │ ├── decoded.py
│ │ ├── elon_musk_2015.jpg
│ │ ├── laos.jpg
│ │ ├── model_face.jpg
│ │ ├── __pycache__
│ │ │ ├── all_in_one_pb2.cpython-36.pyc
│ │ │ ├── all_in_one_pb2_grpc.cpython-36.pyc
│ │ │ └── decoded.cpython-36.pyc
│ │ ├── sophia.jpg
│ │ ├── test
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ └── __init__.cpython-36.pyc
│ │ │ └── test_images
│ │ │ ├── adele_2016.jpg
│ │ │ ├── benedict_cumberbatch_2014.png
│ │ │ ├── classroom_in_tanzania.jpg
│ │ │ ├── elon_musk_2015.jpg
│ │ │ ├── __init__.py
│ │ │ ├── laos.jpg
│ │ │ ├── model_face.jpg
│ │ │ ├── sophia.jpg
│ │ │ ├── waaah.jpg
│ │ │ ├── woman.jpg
│ │ │ └── zebra_stripes.jpg
│ │ ├── waaah.jpg
│ │ ├── woman.jpg
│ │ └── zebra_stripes.jpg
答案 0 :(得分:1)
因此,您已经引用了main.py,但您的目录结构中也有__main__.py。我假设您的目录实际上包含main.py而不是__main __。py。
要从包中的更高级别导入,请以句点开始导入。
要仅导入一个功能,您可以使用from .main import images_demo
现在,让我们首先说main.py与allinone_server.py一起在grpc /中,然后将其移到其他目录中,看看导入如何更改。
如果是在grpc / from .main import images_demo
如果在模型中/ from ..main import images_demo
如果在__ALL-IN-ONE / from ...main import images_demo
如果在__demo / from ...__demo.main import images_demo
每个额外的时间段都会使您在层次结构中上一层,然后在目标路径中使用下一层的名称,直到到达想要的位置为止。
现在让我们假设您想导入整个main.py。
如果在grpc / from . import main
如果在模型中/ from .. import main
如果在__ALL-IN-One / from ... import main
如果在__demo / from ...__demo import main
最后,仅当使用该点的文件位于软件包中时,向上移动点符号才有效,因此如果在顶层在此软件包之外的范围中启动程序然后使用{ {1}}
但是,如果直接运行from __ALL-IN-ONE.models.grpc import allinone_server
,则它将无法导入上面的任何内容,因为它不会作为软件包的一部分被导入。试试看,让我知道是否需要更好的解释。
祝你好运!
答案 1 :(得分:0)
您不能直接从另一个文件夹导入功能,为此您必须使用此功能:
import sys
sys.path.insert(0, "../../demo/")
下一步是将__main__
重命名为main
。
这是为我工作的确切示例:
树:
.
├── demo
│ ├── __init__.py
│ ├── main.py
│
└── models
└── grpc
└── allinone_server.py
main.py:
def images_demo():
print("hello there")
呼叫文件(allinone_server.py
):
import sys
sys.path.insert(0, "../../demo/")
import main
main.images_demo()