使用Pipenv

时间:2018-12-05 09:53:48

标签: python pycharm python-import pipenv

文件树

/path/to/project/root/ 
├── .git/ 
├── Pipfile 
├── Pipfile.lock 
├── __init__.py 
└── package1
    ├── __init__.py
    ├── src
    │   ├── __init__.py
    │   ├── external_lib
    │       └── packageX
    │           ├── packageY
    │           └── packageZ
    │   ├── foo.py
    │   ├── bar.py

约束:

  • foo.py导入bar.py
  • foo.pybar.py都从external_lib/packageX/packageZ导入一些文件
  • external_lib/packageX/packageZ中的
  • 个文件要求packageXpackageYPYTHONPATH中,以包含它们自己的内容。
  • 我没有一个入口点:有时我想启动foo.py,有时要启动bar.py
  • external_lib是外部的,它是一个git子模块。我不想更改其内容。
  • 这是一个共享项目,我想要git存储库中包含的解决方案...

我现在正在做什么

我正在遵循here(尽管是法语)的建议,声称这是一种很好的做法:

  • 在运行任何脚本之前,我先运行cd package1/src/external_lib/packageX; export PYTHONPATH=$PYTHONPATH: pwd : pwd /packageY; cd ../../../..
  • 我所有的导入都这样写:import package1.src.barimport package1.src.external_lib.packageX.packageZ.some_module
  • 我总是从项目根目录调用所有脚本。

这给出了这样的内容:

cd /path/to/project/root/ 
pipenv shell
cd package1/src/external_lib/packageX; export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/packageY; cd ../../../..
python package1/src/foo.py
python package1/src/bar.py

问题

关于项目架构,Pipenv使用,导入编写等方面的最佳实践是什么,以最少的手动操作和约束(例如,之前使用export PYTHONPATH=...命令)来平滑地管理所有导入以最Pythonic和Pipenv-ic的方式运行脚本并从根目录启动脚本?

理想情况下,我也希望Pycharm能够正确地获取所有导入而无需进一步的手动设置,以便我在Pycharm中所做的事情能够反映出终端机将发生的情况。

我看到的一种可能的解决方案是使用Pipenv的.env文件,在其中添加export PYTHONPATH=...,并依靠其automatic loading。但是,显然该文件is not meant for that and should not be commited

0 个答案:

没有答案