使用 pip 将 Python 包从本地文件系统文件夹安装到虚拟环境

2025-02-05 13:23:00
admin
原创
92
摘要:问题描述:是否可以使用 pip 从本地文件系统安装包?我已经运行了python setup.py sdist我的软件包,它创建了相应的 tar.gz 文件。此文件存储在我的系统中的/srv/pkg/mypackage/mypackage-0.1.0.tar.gz。现在在虚拟环境中,我想安装来自 pypi 或特...

问题描述:

是否可以使用 pip 从本地文件系统安装包?

我已经运行了python setup.py sdist我的软件包,它创建了相应的 tar.gz 文件。此文件存储在我的系统中的/srv/pkg/mypackage/mypackage-0.1.0.tar.gz

现在在虚拟环境中,我想安装来自 pypi 或特定本地位置的包/srv/pkg

这可能吗?

PS
我知道我可以指定pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz。这样可以,但我说的是/srv/pkg如果我输入 ,则使用该位置作为 pip 搜索的另一个位置pip install mypackage


解决方案 1:

那怎么样::

pip install --help
...
  -e, --editable <path/url>   Install a project in editable mode (i.e. setuptools
                              "develop mode") from a local project path or a VCS url.

例如,pip install -e /srv/pkg

其中 /srv/pkg 是可以找到“setup.py”的顶级目录。

解决方案 2:

我非常确定您正在寻找的东西就是--find-links选项。

你可以做

pip install mypackage --no-index --find-links file:///srv/pkg/mypackage

解决方案 3:

从安装包页面,您可以简单地运行以下命令,其中/srv/pkg/mypackage是包含setup.py文件的目录。

pip install /srv/pkg/mypackage

另外1,您可以从存档文件中安装它。

pip install ./mypackage-1.0.4.tar.gz 

1
虽然在问题中提到,但鉴于其受欢迎程度,因此也包括在内。

解决方案 4:

我正在安装pyfuzzy但它不在 PyPI 中;它返回消息:No matching distribution found for pyfuzzy

我尝试了接受的答案

pip install  --no-index --find-links=file:///Users/victor/Downloads/pyfuzzy-0.1.0 pyfuzzy

但它也不起作用并返回以下错误:

忽略索引:https ://pypi.python.org/simple
收集 pyfuzzy 找不到满足要求 pyfuzzy 的版本(来自版本:)未找到与 pyfuzzy 匹配的分布

最后,我在那里找到了一个简单好的方法: https ://pip.pypa.io/en/latest/reference/pip_install.html

Install a particular source archive file.
$ pip install ./downloads/SomePackage-1.0.4.tar.gz
$ pip install http://my.package.repo/SomePackage-1.0.4.zip

因此以下命令对我有用:

pip install ../pyfuzzy-0.1.0.tar.gz.

希望它能帮助你。

解决方案 5:

这是我最终使用的解决方案:

import pip


def install(package):
    # Debugging
    # pip.main(["install", "--pre", "--upgrade", "--no-index",
    #         "--find-links=.", package, "--log-file", "log.txt", "-vv"])
    pip.main(["install", "--upgrade", "--no-index", "--find-links=.", package])


if __name__ == "__main__":
    install("mypackagename")
    raw_input("Press Enter to Exit...
")

我从pip install 示例以及Rikard对另一个问题的回答中拼凑了这一点。“--pre”参数允许您安装非生产版本。“--no-index”参数避免搜索 PyPI 索引。“--find-links=.”参数在本地文件夹中搜索(可以是相对的或绝对的)。我使用“--log-file”、“log.txt”和“-vv”参数进行调试。“--upgrade”参数允许您在旧版本上安装较新的版本。

我还发现了一种卸载它们的好方法。当您有多个不同的 Python 环境时,这种方法很有用。它的基本格式相同,只是使用“uninstall”而不是“install”,并采取了安全措施来防止意外卸载:

import pip


def uninstall(package):
    response = raw_input("Uninstall '%s'? [y/n]:
" % package)
    if "y" in response.lower():
        # Debugging
        # pip.main(["uninstall", package, "-vv"])
        pip.main(["uninstall", package])
    pass


if __name__ == "__main__":
    uninstall("mypackagename")
    raw_input("Press Enter to Exit...
")

本地文件夹包含这些文件:install.py、uninstall.py、mypackagename-1.0.zip

解决方案 6:

一个选项--find-links可以完成这个工作,而且它是从requirements.txt文件中工作的!

您可以将软件包档案放在某个文件夹中,并获取最新的档案而不更改需求文件,例如requirements

.
└───requirements.txt
└───requirements
    ├───foo_bar-0.1.5-py2.py3-none-any.whl
    ├───foo_bar-0.1.6-py2.py3-none-any.whl
    ├───wiz_bang-0.7-py2.py3-none-any.whl
    ├───wiz_bang-0.8-py2.py3-none-any.whl
    ├───base.txt
    ├───local.txt
    └───production.txt

现在requirements/base.txt输入:

--find-links=requirements
foo_bar
wiz_bang>=0.8

更新专有软件包的一个简洁方法,只需将新软件包放入文件夹中即可

通过这种方式,您可以使用同一个调用从local folderAND安装软件包:pypi`pip install -r requirements/production.txt`

PS. 参阅我的cookiecutter-djangopackage fork 来了解如何拆分需求并使用基于文件夹的需求组织。

解决方案 7:

要仅从本地安装,您需要 2 个选项:

  • --find-links:在哪里查找依赖项。不需要file://其他人提到的前缀。

  • --no-index:不要在 pypi 索引中查找缺少的依赖项(未安装且不在--find-links路径中的依赖项)。

因此您可以从任何文件夹运行以下命令:

pip install --no-index --find-links /srv/pkg /path/to/mypackage-0.1.0.tar.gz

如果您的 mypackage 设置正确,它将列出其所有依赖项,如果您使用 pip download 下载依赖项的级联(即依赖项的依赖项等),一切都会正常工作。

如果您想在可访问时使用 pypi 索引,但在无法访问时回退到本地 wheel,您可以删除--no-index并添加--retries 0。您会看到 pip 暂停一会儿,它会尝试检查 pypi 是否缺少依赖项(未安装的依赖项),当它发现无法访问时,将回退到本地。似乎没有办法告诉 pip“先查找本地的,然后再查找索引”。

解决方案 8:

假设您有 virtualenv 和一个requirements.txt文件,那么您可以在这个文件中定义从哪里获取包:

# Published pypi packages 
PyJWT==1.6.4
email_validator==1.0.3
# Remote GIT repo package, this will install as django-bootstrap-themes
git+https://github.com/marquicus/django-bootstrap-themes#egg=django-bootstrap-themes
# Local GIT repo package, this will install as django-knowledge
git+file:///soft/SANDBOX/python/django/forks/django-knowledge#egg=django-knowledge

解决方案 9:

requirements.txtegg_dir目录中有需求

您可以构建本地缓存:

$ pip download -r requirements.txt -d eggs_dir

然后,使用该“缓存”很简单,例如:

$ pip install -r requirements.txt --find-links=eggs_dir

解决方案 10:

您需要的是--find-linkspip install。

-f, --find-links 如果是 html 文件的 url 或路径,则解析存档的链接。如果是目录的本地路径或 file:// url,则在目录列表中查找存档。

就我而言,之后在目录中生成python -m buildtar.gz 包(和文件) 。whl`./dist`

pip install --no-index -f ./dist YOUR_PACKAGE_NAME

任何 tar.gz python 包都./dist可以通过这种方式安装。

但是如果你的包有依赖项,这个命令会提示错误。为了解决这个问题,你可以pip install从官方 pypi 源中获取这些依赖项,然后--no-deps像这样添加

pip install --no-index --no-deps -f ./dist YOUR_PACKAGE_NAME

或者将您的 deps 包复制到 ./dist 目录。

解决方案 11:

就我的情况而言,这是因为这个库依赖于另一个本地库,而我尚未安装该库。使用 pip 安装依赖项,然后安装依赖库,问题就解决了。

解决方案 12:

我一直在尝试实现一些非常简单的事情但却失败了,也许我很愚蠢。

无论如何,如果您有一个脚本/Dockerfile下载一个 python 包 zip 文件(例如从 GitHub 下载)然后想要安装它,您可以使用file:///前缀来安装它,如以下示例所示:

$ wget https://example.com/mypackage.zip
$ echo "${MYPACKAGE_MD5}  mypackage.zip" | md5sum --check -
$ pip install file:///.mypackage.zip

注意:我知道您可以立即使用该软件包pip install https://example.com/mypackage.zip,但就我而言,我想验证校验和(永远不够偏执),并且在尝试使用 pip 提供的各种选项/#md5片段时失败了。

直接用 做这么简单的事情真是令人沮丧pip。我只是想传递一个校验和,并安装之前pip验证 zip 是否匹配。

我可能做了一件非常愚蠢的事情,但最终我放弃了,选择了这个。我希望它能帮助其他尝试做类似事情的人。

解决方案 13:

还有一个有用的标志:--no-build-isolation。当我尝试从源代码安装而无需互联网时,它对我有帮助:

pip install -e . --disable-pip-version-check  --no-index --find-links= ...

出现错误 - 未找到setuptools,但是,setuptools 已安装,并--no-build-isolation在此处提及:pip 说 setuptools 版本 40.8.0 不满足 setuptools>=40.8.0 的要求,解决了该问题。

解决方案 14:

只需在 pip 命令上添加目录
pip install mypackage file:/location/in/disk/mypackagename.filetype

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2911  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1774  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   0  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   0  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用