我有一个 Python 项目,它由一个 Jupyter 笔记本、一个目录中的多个脚本和一个bin
目录中的模块组成src
,依赖项位于Pipfile
:
myproject
├── myproject.ipynb
├── Pipfile
├── Pipfile.lock
├── bin
│ ├── bar.py
│ └── foo.py
└── src
├── baz.py
└── qux.py
脚本foo.py
并bar.py
使用标准 shebang
#!/usr/bin/env python
并且可以运行pipenv shell
:
mymachine:myproject myname$ pipenv shell
(myproject-U308romt) bash-3.2$ bin/foo.py
foo
但是,我无法轻松地src
从脚本中访问模块。如果我添加
import src.baz as baz
,foo.py
我得到:
ModuleNotFoundError: No module named 'src'
我尝试的一种解决方案是在.env
下面添加一个文件myproject
:
PYTHONPATH=${PYTHONPATH}:${PWD}
这要归功于pipenv
的自动加载.env
,但是将.env
文件检入到项目的 git 发行版中会与存储密码等机密的传统用法发生冲突.env
——事实上,我.gitignore
对 Python 项目的默认设置已经排除.env
了这个原因.
$ git add .env
The following paths are ignored by one of your .gitignore files:
.env
Use -f if you really want to add them.
或者,我可以移到src
下bin
,但是 Jupyter 笔记本必须引用模块bin.src.baz
等,这也很麻烦。
我目前的解决方法是添加一个符号链接:
myproject
├── Pipfile
├── Pipfile.lock
├── bin
│ ├── bar.py
│ ├── foo.py
│ └── src -> ../src
└── src
├── baz.py
└── qux.py
这行得通,我想有透明的好处,但似乎应该有一些方法可以利用pipenv
来解决同样的问题。
是否有一种可移植的、可分发的方式将这些模块放在搜索路径上?