如何从另一个目录的子包导入python子目录中的文件?

2024-09-29 23:26:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我的主项目文件夹中有以下目录结构。你知道吗

 |ALL-IN-ONE
    |demo
         |__init__.py
         |__main__.py
    |models
         |grpc
             |allinone_server.py

我想从阿利诺进口_服务器.py在main.py中定义的一个函数,称为images\u demo。我试过了

from demo.__main__ import images_demo

它不起作用。如何导入?我尝试导入的函数位于demo目录中的main.py中。我正试图从文件中导入它_服务器.py在grpc中。我想我已经把问题说清楚了。 这是这项工程的整棵树

├── 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

Tags: sampleinpyagegrpcinitdemomain
2条回答

不能直接从其他文件夹导入函数,为此,必须使用以下方法:

import sys
sys.path.insert(0, "../../demo/")

另一个步骤是将__main__重命名为main。你知道吗

下面就是一个对我有效的例子:

树:

.
├── demo
│   ├── __init__.py
│   ├── main.py
│   
└── models
    └── grpc
        └── allinone_server.py

主.py:

def images_demo():
    print("hello there")

调用文件(allinone_server.py

import sys
sys.path.insert(0, "../../demo/")

import main

main.images_demo()

所以你提到主.py,但在目录结构中也有uuu main\uuuuy.py。我假设你的目录中主.py而不是main.py。你知道吗

要从包中的级别向上导入,请以句点开始导入。 要只导入一个函数,可以使用from .main import images_demo

现在,让我们先说主.py在grpc/和allinone一起_服务器.py,然后我们将其移动到不同的目录,并查看导入是如何更改的。你知道吗

如果它在grpc/from .main import images_demo

如果它在模型中/from ..main import images_demo

如果它是一体的from ...main import images_demo

如果它在演示中from ...__demo.main import images_demo

每增加一个句点,就在层次结构中向上提升一个级别,然后在目标路径中使用下一个级别的名称,直到到达您想要的位置。你知道吗

现在假设您想导入整个主.py. 如果它在grpc/from . import main

如果它在模型中/from .. import main

如果是一体机/from ... import main

如果它在演示中from ...__demo import main

最后,向上移动一个级别的点表示法只在使用它的文件在一个包中时才起作用,因此如果在顶层,您在这个包之外的范围内启动程序,然后使用from __ALL-IN-ONE.models.grpc import allinone_server,这将很好地工作

但是,如果您直接运行allinone_server.py,那么它将无法导入它上面的任何内容,因为它不是作为包的一部分导入的。试试看,如果需要更好的解释请告诉我。你知道吗

祝你好运!你知道吗

相关问题 更多 >

    热门问题