是否可以使用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。


当前回答

就我而言,这是因为这个库依赖于另一个本地库,而我还没有安装。使用pip安装依赖,然后安装依赖库,解决了这个问题。

其他回答

只需在pip命令上添加目录 PIP安装mypackage文件:/location/in/disk/mypackagename.filetype

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

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...\n")

我从pip安装示例以及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]:\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...\n")

本地文件夹包含以下文件:install.py、uninstall.py、mypackagame -1.0.zip

是什么::

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”。

在requirements.txt和egg_dir中有需求作为目录

您可以构建本地缓存:

$ PIP download -r requirements.txt -d eggs_dir

然后,使用“缓存”很简单,就像:

$ PIP install -r requirements.txt——find-links=eggs_dir

要从本地安装,您需要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索引(如果它是可访问的),但如果不能回退到本地轮,您可以删除——no-index和添加——retries 0。您将看到pip在尝试检查pypi是否缺少依赖项(未安装的依赖项)时暂停一段时间,当它发现无法到达它时,将回落到本地。似乎没有办法告诉pip“先找本地的,再找索引”。