我如何使用pipenv以默认情况下使用site-packages而不是使用PyPi索引的方式安装软件包。对于上下文,我在我的site-packages文件夹中有一个公司批准的包列表。
我仍然希望使用venv以便正确捕获这些依赖项,而不是直接使用站点包。
答案 0 :(得分:3)
你有一个已经安装了某些软件包的python安装。 virtualenv创建一个具有自己的安装目录的环境,该环境不与其他virtualenv环境共享库(并且可选地也不访问全局安装的库)。您的问题听起来像是您可能希望与新的virtualenv共享库。 Not having access to global site-packages is now the default behavior。但是你can override defaults如果这适合你的用例。但是site-packages folder不能作为pip的来源,但可以与其他虚拟环境共享 - 但(re-)creating the versioning issue virtualenv was made to solve。
对于可重复性,您可以使用pip freeze冻结当前的包列表。如果要在另一个系统上重新创建此python安装,则需要tell pip where to find (any restricted set of) source packages if it should not use PyPI。如果公司批准的软件包在PyPI上可用 - 那么只需从你的默认python安装中冻结的requirements.txt中明确地构建新环境。您甚至可以使用editable installs构建一个python环境 - 如果您可以访问任何公司开发的python包的源代码。 pip有numerous options to install packages from different sources。选项7& 8让您了解如何从源存档或备用软件包存储库或本地文件系统进行安装。
pipenv发明了一种名为Pipfile的东西。此文件固定包依赖项和define sources (like PyPI) for dependencies。您必须了解如何引用备用来源。 [[source]]条目的顺序可能很重要。
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[[source]]
url = "http://pypi.home.kennethreitz.org/simple"
verify_ssl = false
name = "home"
[dev-packages]
url = "http://mycompany.package.repo/simple/"
verify_ssl = false
name = "company-approved-packages"
[packages]
requests = "*"