我的项目结构如下
project_name/
project_name/
__init__.py
sub_package1/
__init__.py
some_module1.py
sub_package2/
__init__.py
some_module2.py
scripts/
some_script.py
notebooks/
some_notebook.py
top level files <requirements.txt, .gitignore, README.md, ...>
现在,我希望能够在scripts文件夹中的python脚本中以及在notebooks文件夹中的笔记本中以以下方式访问我的主库
from project_name.sub_package1 import some_module1
实现此目标的最佳方法是什么?
我提出了一些想法:
在我的笔记本文件夹中,创建一个包含内容的文件context.py
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
然后,我可以在笔记本电脑上做
from context import project_name
然后从那里开始工作。可以,但是当然可以在不使用上下文的情况下直接导入project_name会更好。
在笔记本中执行
notebook_dir = os.path.split(os.getcwd())[0]
if notebook_dir not in sys.path:
sys.path.insert(0, notebook_dir)
因为在交互式外壳程序中不存在dunder文件。在这里,我不完全确定如果在某个地方更改cwd会发生什么,毕竟在笔记本的开头出现这种混乱情况是不希望的。
将project_name根文件夹添加到python路径。如果可以通过非硬编码的方式完成此操作,那就太好了。我使用pyenv和pyenv virtualenv。
感谢您的建议, 马特