从其他文件夹导入模块python(错误)

2024-10-03 19:31:05 发布

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

我是Python新手。我使用以下目录结构,并尝试将模块OrgRepo导入Func1。我使用virtualenv和vs代码作为我的IDE。在

src/ ├── Functions │   ├── Func1 │   └── Func2 └── Shared ├── __init__.py ├── Repositories │ ├── __init__.py │   ├── OrgRepo └── Utilities ├── __init__.py └── DictUtil 我也尝试过不使用“init.py”

这是我的道路:

['/Users/username/Documents/Projects/myproject/name/src/Functions/Func1', '/Users/username/anaconda3/envs/my_virtual_env/lib/python37.zip', '/Users/username/anaconda3/envs/my_virtual_env/lib/python3.7', '/Users/username/anaconda3/envs/my_virtual_env/lib/python3.7/lib-dynload', '/Users/username/.local/lib/python3.7/site-packages', '/Users/username/anaconda3/envs/my_virtual_env/lib/python3.7/site-packages']

为了将OrgRepo导入Func1,我尝试了以下操作:

1:from .Shared.Repositories import OrgRepo

ModuleNotFoundError: No module named '__main__.Shared'; '__main__' is not a package

2:from ..Shared.Repositories import OrgRepo '

ValueError: attempted relative import beyond top-level package

3:from src.Shared.Repositories import OrgRepo

ModuleNotFoundError: No module named 'src'

4:`from共享存储库导入OrgRepo1

'ModuleNotFoundError: No module named 'Shared'

5:我正在使用VS代码,当我试图保存文件时:

它会自动更改为: import OrgRepo import DictionaryUtilities import datetime import json import sys sys.path.insert(0, 'src/Repositories/')

第六章: import sys sys.path.insert( 0, '/Users/username/Documents/Projects/project/m/src/Repositories') import OrgRepo

还有这个:

sys.path.insert(0, 'Repositories')sys.path.insert(0, .'Repositories')sys.path.insert(0, ..'Repositories')

在运行或保存时,vs代码将其更改为: import OrgRepo import sys sys.path.insert( 0, '/Users/username/Documents/Projects/project/m/src/Repositories') 并收到以下错误:

ModuleNotFoundError: No module named 'OrgRepo'

我可以安装这个与PIP和导入它,但这不适合我们的需要。在

我读过这些帖子: Importing files from different folder

Python import modules, folder structures

How to Import Multiple Python Modules from Other Directories

How to properly import python modules from an adjacent folder?

我也试着阅读/理解其他一些帖子。我甚至试着敲了几次磁通电容器都没用。在

编辑:我用这段代码作为AWS Lambda函数上传。而系统路径解决方案在本地工作,这使得它不适合我的工作流程。这需要我改变系统路径上载时导入并导致Intellisense出现问题。我希望能够直接导入模块。e、 所以Intellisense不会抛出错误,我可以压缩并上传我的包到AWS。当我能够导入<module_name>时,将我的包上载到AWS没有问题。在

我在Anaconda中激活环境,然后导出以下PYTHONPATH环境变量:

export PYTHONPATH=src/shared/repositories:src/shared/utilities

我也试过export PYTHONPATH=$PATH:src/shared/repositories:src/shared/utilities

这在一段时间内有效,现在我得到了智能感知。当我试图从/src上面的目录运行脚本时,似乎没有遇到此错误。在

如果有人能告诉我如何使用标准import <module>导入我的模块,并使其始终工作,我将不胜感激。在


Tags: path代码fromimportsrclibsysusername
2条回答

基本上说一个目录不能被导入,但是目录中的一个文件可以被导入。在

假设你有组织py在OrgRepo中归档,您可以:

from src.Shared.Repositories.OrgRepo import Org

或者,如果您想从中调用一个特定的方法,让我们假设do_it

^{pr2}$

Read more

我想你想做的是像下面这样的事情。我已经清理了一些目录名(通常目录是小写的下划线,类名是大写的),在python文件中添加了.py扩展名,并尝试创建一个最简单的环境来复制您的场景。希望这是有帮助的。在

设置环境

$ mkdir src; mkdir src/functions; touch src/functions/func1.py; mkdir src/shared; mkdir src/shared/repositories; touch src/shared/repositories/org_repo.py

$ tree
.
└── src
    ├── functions
    │   └── func1.py
    └── shared
        └── repositories
            └── org_repo.py

# src/shared/repositories/org_repo.py
def a_cool_func():
    print(f'hello from {__file__}')

# src/functions/func1.py
import pathlib
import sys

file_path = pathlib.Path(__file__)
path = file_path.resolve().parents[2]
sys.path.append(str(path))

from src.shared.repositories.org_repo import a_cool_func

print(f'hello from {__file__}')

a_cool_func()

运行它

^{pr2}$

相关问题 更多 >