从本地 git 存储库访问 Python 包

Posted

技术标签:

【中文标题】从本地 git 存储库访问 Python 包【英文标题】:Access a Python Package from local git repository 【发布时间】:2013-08-03 02:44:19 【问题描述】:

我的机器上有一个本地 git repository,假设在 /develop/myPackage 下。 我目前正在将它开发为一个 python 包(一个 Django 应用程序),我想从我的本地 virtualenv 访问它。我试图在我的PYTHONPATH 中包含它的路径(我在 Mac 上)

export PATH="$PATH:/develop/myPackage"

该目录已在其根目录和每个子目录中包含__init__.py。 不管我做什么,但我不能让它工作,python 不会看到我的包。

替代方案是:

将我的本地更改推送到 github 并使用 pip 在我的 virtualenv 中安装包 激活我的 virtualenv 并使用 python setup.py install 手动安装包

由于我经常需要对我的代码进行更改,因此最后两个解决方案将需要大量的工作,即使是很小的更改。

我做错了吗?您能提出更好的解决方案吗?

【问题讨论】:

您声称要设置PYTHONPATH,但您的示例是设置PATH。它们不是一回事。 据我所知,在 Mac 上 PYTHONPATH 环境。变量是通过 PATH 变量设置的。我可能错了,强硬.. 【参考方案1】:

您上面显示的示例使用 PATH,而不是 PYTHONPATH。通常,python 使用的搜索路径部分基于 PYTHONPATH 环境变量(PATH 在这种情况下几乎没有用处。)

试试这个:

export PYTHONPATH=$PYTHONPATH:/develop/myPackage

虽然实际上,您可能希望它指向包含您的包的目录(因此您可以执行“导入 myPackage”,而不是在包中导入内容。话虽如此,您可能希望:

export PYTHONPATH=$PYTHONPATH:/develop/

在此处参考 python 文档以获取有关 Python 的模块/包搜索路径的更多信息:http://docs.python.org/2/tutorial/modules.html#the-module-search-path

默认情况下,Python 使用与它一起安装的包作为其默认路径,因此 PYTHONPATH 在环境中未设置。

【讨论】:

首先,Mac 上的 PYTHONPATH 是一个空变量。我认为一切都是使用 PATH 变量设置的。进行谷歌搜索时,无论是否使用 PATH 或 PYTHONPATH,我都有相互矛盾的意见。无论如何我都试过了,我可以导出和访问这两个变量,但我不能导入我的包。我尝试导入它来激活和停用我的 virtualenv,但没有成功。 正如 TheBigC 指出的那样,您设置 PYTHONPATH 不正确。 谢谢,我设法使用 PYTHONPATH 变量使其工作。我也打算深入。例如导出/my_projects/my_django_app/my_package 的东西不起作用,但导出/my_projects/my_django_app 的东西确实起作用。我很困惑,因为my_django_app 在其根部没有__init__.py(my_package 有它)。我通过import my_package 让它工作。我想我在这里错过了一步。 而且我仍然不明白为什么 PYTHONPATH 默认为空。 python 从何而来?那么它应该是PATH变量... import sys 然后print sys.path 为您解答【参考方案2】:

从您的本地路径将其安装到editable mode:

pip install -e /develop/MyPackage

这实际上是在你的 virtualenv 中对包进行符号链接,这样你就可以继续开发和测试。

【讨论】:

从技术上讲,两个答案都是正确的,但这正是我想要的!

以上是关于从本地 git 存储库访问 Python 包的主要内容,如果未能解决你的问题,请参考以下文章

如何设置我的本地 Git 存储库以使用我刚刚创建的新个人访问令牌? [复制]

如何从 Docker 容器克隆 Git 存储库

是否可以使用 pip 从私有 GitHub 存储库安装包?

在 Azure DevOps Git 存储库中使用来自 Azure Pipelines 的 Python 包版本标记 Git 存储库

如何使用 Composer 从本地 Git 存储库安装标记提交?

如何使用 Java 代码从 Git 存储库下载文件