python - 为 github repo 配置本地 python 包导入的最佳实践?
问题描述
我对进口很陌生,所以我的方法可能不完整,但我真的很难拼凑出应该如何完成的工作。
所以我有一个我正在处理的 github 存储库,目前看起来像这样:
Github-repo-name
/src
/repo-name
__init__.py
/packages
__init__.py
mypackage1/
__init__.py
p1_module1.py
mypackage2/
__init__.py
p2_module1.py
main.py
/scripts
do_something.py
/datasets
我正在尝试将 mypackage1 导入 do_something.py 以生成一些数据以放入 datasets/ 中,但是当我在src目录中运行 do_something.py 脚本时遇到了很多麻烦。
我在 do_something.py 中有这一行:
import repo-name.packages.mypackage1
并且被击中:ModuleNotFoundError:没有名为 repo-name 的模块
我尝试了相对进口,但没有成功
from ..repo-name.packages import mypackage1
ImportError:尝试在没有已知父包的情况下进行相对导入
我无法解决这个问题,所以我尝试将我的包添加到 do_something.py 的路径中
file_path = pathlib.Path(__file__)
path = file_path.resolve().parents[2]
sys.path.append(str(path))
import repo-name.packages.mypackage1
成功!
除了现在我想知道这是否真的是我应该做的,如果这不是有点 hacky。需要在运行时添加路径的想法似乎有点混乱,所以我宁愿一直拥有它。我已经读过我可以使用 PYTHONPATH 来达到这个目的,如果只有我使用这个 repo 那就太好了,但我打算共享和复制它。我考虑过可能编写一个 shell 脚本来设置 PYTHONPATH,但我不确定这会好得多。
所以我的问题是做我想做的事情的正确/更好/好方法是什么?
解决方案
奥利弗。
我不知道什么是最好的方法,但我想向您展示我们团队的工作方式。
开发时,
i) 注册PYTHONPATH
在~/.bashrc
ii)sys.path.append(path/to/root/repo)
在代码的顶部
我们的团队通常将其作为初始方式。
要区分他们是否获得repo的权限,您可以检查以下内容。
# Suppose you created a setup.py(to make `.whl` file) on `repo-name`.
if __name__ == '__main__':
from repo-name.packages.mypackage1 import *
else:
from ..repo-name.packages.mypackage1 import *
推荐阅读
- hibernate - Hibernate 5:使用命名查询和无状态会话返回 java.lang.UnsupportedOperationException
- performance - Traefik 负载均衡方法
- apache-spark - 使用 kafka 方法和火花流从 kafka 消费会产生不同的结果
- c# - 获取“无法创建“MyBaseClass_0”的实例
- javascript - 我在使用复选框时遇到问题
- apache-spark - 无法在 Kubernetes POD 上部署 spark 历史服务器
- python - Ansible Playbook 在通过 Jenkins 执行时失败:/usr/bin/env: 'python3': No such file or directory
- python - Django - CreateView 不保存
- qt - 在不同的文件夹中安装 qt 应用程序
- android - Hilt - CoroutineDispatcher 上缺少绑定