我正在努力保持数据科学项目组织良好,所以我在我的src目录中创建了一个目录,其中包含utils一个名为的文件helpers.py,其中包含一些将在许多脚本中使用的辅助函数.我应该如何func_name从src/utils/helpers.py一个完全不同的目录中导入文件的最佳实践是什么,例如src/processing/clean_data.py?
我看到了这个问题的答案,我已经实现了一个有效的解决方案,但这感觉很难看:
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))))
Run Code Online (Sandbox Code Playgroud)
我这样做了吗?我是否需要将此添加到每个要导入的脚本中func_name,例如train_model.py?
我当前的项目文件夹结构:
myproject
/notebooks
notebook.ipynb
/src
/processing
clean_data.py
/utils
helpers.py
/models
train_model.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
示例文件:
# clean_data.py
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))))
from src.utils.helpers import func_name
func_name()
# helpers.py
def func_name():
print('I'm a helper function.')
Run Code Online (Sandbox Code Playgroud)
首先,让我向您描述Python 模块和Python 包之间的区别,以便我们在同一页面上。?
import aModuleName
# Here 'aModuleName' is just a regular .py file.
__init__.py文件。?from aPackageName import aModuleName
# Here 'aPackageName` is a folder with a `__init__.py` file
# and 'aModuleName', which is just a regular .py file.
因此,当我们有一个名为proj-dir的以下结构的项目目录时?
proj-dir
--|--__init__.py
--package1
--|--__init__.py
--|--module1.py
--package2
--|--__init__.py
--|--module2.py
请注意,我还在proj-dir本身中添加了一个空
__init__.py的,这也使它成为一个包。
现在,如果你想导入任何Python对象模块2的包装2成模块1的包1,然后导入在文件中的语句module1.py会
from package2.module2 import object2
# if you were to import the entire module2 then,
from package2 import module2
做正确的方法是使用__init__.py,setup.py和setuptoolsPython包:
myPackage/
myPackage/
__init__.py
setup.py
Run Code Online (Sandbox Code Playgroud)
此链接包含所有步骤.
| 归档时间: |
|
| 查看次数: |
2146 次 |
| 最近记录: |