我有这样的文件夹结构:
application
├── app
│ └── folder
│ └── file.py
└── app2
└── some_folder
└── some_file.py
如何从file.py或some_file.py中导入函数?我尝试了:
from application.app.folder.file import func_name
但它不起作用。
我有这样的文件夹结构:
application
├── app
│ └── folder
│ └── file.py
└── app2
└── some_folder
└── some_file.py
如何从file.py或some_file.py中导入函数?我尝试了:
from application.app.folder.file import func_name
但它不起作用。
当前回答
以防有人仍然需要解决方案,但在上面的答案中没有找到解决方案。这对我有用:
我有这样的文件夹结构:
a
└── b
├── c1
| └── d
| └── a_script.py
└── c2
└── a_lib.py
我需要将a_lib.py包含在a_script.py中。这就是我如何解决c2无法识别的错误:
import sys
from pathlib import Path
path_scripts = Path(__file__).resolve().parents[2]
sys.path.append(str(path_scripts))
from c2 import a_lib
其他回答
在linux上的python3中为我工作
import sys
sys.path.append(pathToFolderContainingScripts)
from scriptName import functionName #scriptName without .py extension
创建包的最佳实践是从最高级别目录中的main_module.py等模块运行和访问其他模块。
此结构说明您可以使用顶级目录文件main_module.py来使用和访问子包、父包或同级包和模块。
创建并运行这些文件和文件夹以进行测试:
package/
|
|----- __init__.py (Empty file)
|------- main_module.py (Contains: import subpackage_1.module_1)
|------- module_0.py (Contains: print('module_0 at parent directory, is imported'))
|
|
|------- subpackage_1/
| |
| |----- __init__.py (Empty file)
| |----- module_1.py (Contains: print('importing other modules from module_1...')
| | import module_0
| | import subpackage_2.module_2
| | import subpackage_1.sub_subpackage_3.module_3)
| |----- photo.png
| |
| |
| |----- sub_subpackage_3/
| |
| |----- __init__.py (Empty file)
| |----- module_3.py (Contains: print('module_3 at sub directory, is imported'))
|
|------- subpackage_2/
| |
| |----- __init__.py (Empty file)
| |----- module_2.py (Contains: print('module_2 at same level directory, is imported'))
现在运行main_module.py
输出为
>>>'importing other modules from module_1...'
'module_0 at parent directory, is imported'
'module_2 at same level directory, is imported'
'module_3 at sub directory, is imported'
打开图片和文件注意事项:
在包结构中,如果您想访问照片,请使用最高级别目录中的绝对目录。
假设您正在运行main_module.py,并且希望在module_1.py中打开photo.png。
module_1.py必须包含的内容是:
对的:
image_path = 'subpackage_1/photo.png'
cv2.imread(image_path)
错误:
image_path = 'photo.png'
cv2.imread(image_path)
尽管module1.py和photo.png位于同一目录。
我的解决方案。他们在包中拥有所有必需的init__.py,但import仍然不起作用。
import sys
import os
sys.path.insert(0, os.getcwd())
import application.app.folder.file as file
以防有人仍然需要解决方案,但在上面的答案中没有找到解决方案。这对我有用:
我有这样的文件夹结构:
a
└── b
├── c1
| └── d
| └── a_script.py
└── c2
└── a_lib.py
我需要将a_lib.py包含在a_script.py中。这就是我如何解决c2无法识别的错误:
import sys
from pathlib import Path
path_scripts = Path(__file__).resolve().parents[2]
sys.path.append(str(path_scripts))
from c2 import a_lib
没有问题:
from application.app.folder.file import func_name
只需确保文件夹还包含__init__.py,这允许它作为包包含。不知道为什么其他答案都提到了巨蟒。