用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
,其中列出了所有包的链接。 这个工具有助于:
关于什么::
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 folder
和pypi
安装软件包: pip install -r requirements/production.txt
PS。 查看我的cokiecutter-djangopackage分支,了解如何拆分需求并使用基于文件夹的需求组织。