我的项目内容是这样的
C:/{user_name}/my_project/
│ bar.sh
├─scripts/
│ │ bar.sh
│ │
│ └─bar/
│ bar.sh
│
└─src/
foo.py
和bar.sh的所有内容
python src/foo.py
所以如果我从C:/{user_name}/my_project/目录运行,bar.sh工作。
bash bash.sh
bash scripts/bar.sh
bash scripts/bar/bar.sh
但是,在移动到scripts目录后,下面的命令不工作,因为bar.sh试图找到/my_project/sciprts/src/foo.py
bash bar.sh
我知道我们可以通过编辑窗口的环境变量来将my_project目录添加到PYTHONPATH来解决这个问题。但是,我希望避免这种情况,因为{user_name}可以变化,并且这个环境被许多人共享。
因此,我正在寻找一个好方法来添加my_project目录到PYTHONPATH通过添加相同的行(s)到bar.sh。你知道这样一个神奇的命令吗?
就我个人而言,我不认为通过bash脚本修改PYTHONPATH
是一个好的解决方案,因为您可能会破坏它。如果您对能够直接调用python foo.py
感兴趣,则应该将/src
转换为一个包。这不仅允许您在系统中的任何地方执行foo.py
,还可以将其中的代码导入到您编写的任何Python代码中。这里有一些关于模块的文档,还有一些关于创建包的文档。
本质上,您在my_project
目录中创建了一些文件来告诉Python有关包本身以及依赖项等的信息。确保/src
目录中的所有目录也有一个__init__.py
文件。一旦你完成了这些,你可以调用pip insall -e my_project
,它将把它作为一个包安装到你的系统上(确保你已经安装了pip;它应该在你安装Python的时候就已经存在了,如果没有,你可以从这里获取)。之后,你可以从任何地方调用你的代码。
cd "$(dirname "$0")/.."
对我有用!