用pip从本地文件系统文件夹安装Python包

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

我已经为我的包运行了python setup.py sdist ,它创build了相应的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位置作为另一个地方的点击search,如果我inputpip install mypackage

我很确定你正在寻找的东西叫做--find-links选项。

尽pipe您可能需要为您的本地包索引生成一个虚拟index.html ,其中列出了所有包的链接。 这个工具有助于:

https://github.com/wolever/pip2pi

关于什么::

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

例如, pip install -e /srv/pkg

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

这是我最终使用的解决scheme:

 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”参数避免了searchPyPI索引。 “–find-links =”。 参数search本地文件夹(这可以是相对或绝对)。 我使用了“–log-file”,“log.txt”和“-vv”参数进行debugging。 “–upgrade”参数可以让你安装比旧版本更新的版本。

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

 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,mypackagename-1.0.zip

我正在安装pyfuzzy。 这不是在PyPI中,“没有findpyfuzzy匹配的分配”。 但是,我尝试接受的答案

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

它不能工作。 结果是:

忽略索引: https ://pypi.python.org/simple收集pyfuzzy无法find满足要求的版本pyfuzzy(从版本:)没有find匹配的发行pyfuzzy

最后,我find一个简单的好方法。 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安装../pyfuzzy-0.1.0.tar.gz。 现在运作良好。 希望能帮到你。

这很简单。 你需要的命令是:

pip install -e <DIRECTORY>

请注意,目录中必须包含setup.py文件

一个选项 – 查找链接做的工作,它从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 folderpypi安装软件包: pip install -r requirements/production.txt

PS。 查看我的cokiecutter-djangopackage分支,了解如何拆分需求并使用基于文件夹的需求组织。