添加PYTHONPATH路径和安装自己的模块之间的区别

时间:2016-09-07 07:18:16

标签: python module packaging

我正在处理一个python项目,该项目包含我反复使用的一些例程。我不是一直重写代码,而是想更新我的包并导入它;然而,它远没有完成,而是在不断变化。我将包托管在一个仓库上,以便各种机器(UNIX + Windows)上的同事可以将它拉入本地存储库并使用它。

听起来我有两个选择,要么我可以在每次更改后继续安装包,或者我可以将文件夹目录添加到我的系统路径中。如果我更换包裹,是否需要重新安装? I'm using this blog post as inspiration,但作者没有强调不断变化的包结构的问题,所以我不确定如何处理这个问题。

此外,如果我想将项目拆分为多个文件并将其捆绑为一个包,那么PTYHONPATH需要在目录结构的哪个级别?到主项目目录,或.sample /目录?

README.rst
LICENSE
setup.py
requirements.txt
sample/__init__.py
sample/core.py
sample/helpers.py
docs/conf.py
docs/index.rst
tests/test_basic.py
tests/test_advanced.py

在这个例子中,我希望能够只导入包本身并像这样调用其中的模块:

import sample

arg = sample.helper.foo()
out = sample.core.bar(arg)

return out

其中core包含一个名为foo的函数

1 个答案:

答案 0 :(得分:0)

PYTHONPATH是一种有效的方法,但在我(个人)看来,如果你有一个完全不同的地方保存你的python变量,它会更有用。像/opt/pythonpkgs左右那样。

对于我希望安装它的项目以及我必须继续开发的项目,我在setup.py中使用develop而不是install

安装包装时,请勿执行以下操作:

python setup.py install

相反,做:

python setup.py develop

这样做是因为它在python库(安装包中)创建了一个synlink / shortcut(我相信它在python中称为egglink),指向你模块的目录。因此,当你更改python文件时,它是一个快捷方式/符号链接/ egglink,它将在下次导入该文件时立即反映出来。

注意:使用此选项,如果删除运行此命令的存储库/目录,则程序包将不再存在(作为唯一的快捷方式)

pip中的等价物是-e(可编辑):

pip install -e .

而不是:

pip install .