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

将路径添加到PYTHONPATH和安装自己的模块之间的区别,python,module,packaging,Python,Module,Packaging,我正在从事一个python项目,该项目包含许多我反复使用的例程。与其一直重写代码,我只想更新我的包并导入它;然而,这还远远没有完成,而且还在不断变化。我将包托管在repo上,以便各种机器(UNIX+Windows)上的同事可以将其拉入本地repo并使用它 听起来我有两个选择,要么在每次更改后继续安装包,要么将文件夹目录添加到系统路径。如果我更改了软件包,是否需要重新安装,但是作者没有强调不断变化的包结构,所以我不知道如何处理这个问题 另外,如果我想将项目拆分为多个文件并将其打包为一个包,那么PT

我正在从事一个python项目,该项目包含许多我反复使用的例程。与其一直重写代码,我只想更新我的包并导入它;然而,这还远远没有完成,而且还在不断变化。我将包托管在repo上,以便各种机器(UNIX+Windows)上的同事可以将其拉入本地repo并使用它

听起来我有两个选择,要么在每次更改后继续安装包,要么将文件夹目录添加到系统路径。如果我更改了软件包,是否需要重新安装,但是作者没有强调不断变化的包结构,所以我不知道如何处理这个问题

另外,如果我想将项目拆分为多个文件并将其打包为一个包,那么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

PYTHONPATH的函数是一种有效的方法,但在我(个人)看来,如果您在一个完全不同的地方保存python变量,它会更有用。比如
/opt/pythonpkgs
等等

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

安装软件包时,请不要执行以下操作:

python setup.py install
相反,你应该:

python setup.py develop
它的作用是在pythonlibs(安装包的地方)中创建一个synlink/快捷方式(我相信它在python中被称为egglink),以指向模块的目录。因此,当您更改python文件时,它是一个快捷方式/symlink/egglink,它将立即反映您下次导入该文件时的情况

注意:使用此方法,如果删除运行此命令的存储库/目录,则包将不再存在(因为它只是一个快捷方式)

pip
中的等效项为-e(可编辑):

而不是:

pip install .

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

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

安装软件包时,请不要执行以下操作:

python setup.py install
相反,你应该:

python setup.py develop
它的作用是在pythonlibs(安装包的地方)中创建一个synlink/快捷方式(我相信它在python中被称为egglink),以指向模块的目录。因此,当您更改python文件时,它是一个快捷方式/symlink/egglink,它将立即反映您下次导入该文件时的情况

注意:使用此方法,如果删除运行此命令的存储库/目录,则包将不再存在(因为它只是一个快捷方式)

pip
中的等效项为-e(可编辑):

而不是:

pip install .

在您的示例中,/opt/pythonpkgs位于PYTHONPATH上,每个包都位于自己的目录中。pythonpkgs目录是否需要包含init.py文件?该目录中的每个包是否也需要一个
/opt/pythonpkgs/my_first\u pkg/\uuuu init\uuu.py
应该存在。在您的示例中,/opt/pythonpkgs位于PYTHONPATH上,每个包位于其自己的目录中。pythonpkgs目录是否需要包含init.py文件?该目录中的每个包是否也需要一个
/opt/pythonpkgs/my_first\u pkg/__init\u uu.py
应该存在。