use*_*468 4 python setup.py pyenv pipenv
正如标题所述——我可以将 setup.py 与 pipelinenv 与 pyenv 一起使用来管理我的环境、版本和依赖项吗?
\n我有一个带有 setup.py 文件的目录结构形式的 python 包。
\n我喜欢使用 Pipenv 作为我的项目环境管理器——我使用 pyenv 来管理我的多个 python 版本。
\n所以我想做的是:
\npyenv version 3.8.5pipenv install foobar\nInstalling foobar\xe2\x80\xa6\nError: An error occurred while installing foobar!\nError text:\nERROR: Could not find a version that satisfies the requirement foobar (from -r /var/folders/2d/f68m9g153v9cywvjn16hs6nc0000gn/T/pipenv-4uv_ikyt-requirements/pipenv-asuqkc7y-requirement.txt (line 1)) (from versions: none)\nERROR: No matching distribution found for foobar (from -r /var/folders/2d/f68m9g153v9cywvjn16hs6nc0000gn/T/pipenv-4uv_ikyt-requirements/pipenv-asuqkc7y-requirement.txt (line 1))\n\n\xe2\x9c\x98 Installation Failed \nRun Code Online (Sandbox Code Playgroud)\n不知所措。
\n我不使用 pyenv 但原理是相同的:你有一个本地可安装的包(使用 setup.py),并且 Pipenv 确实通过其install命令支持这些包,并将它们称为可编辑依赖项。
\n\n您可以告诉 Pipenv 将路径安装为可编辑的 \xe2\x80\x94 通常这对于处理包时的当前工作目录很有用:
\nRun Code Online (Sandbox Code Playgroud)\n$ pipenv install --dev -e . \n \n$ cat Pipfile \n... \n[dev-packages] \n"e1839a8" = {path = ".", editable = true}\n... \n
让我们foobar从libraries文件夹中取出:
libraries$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foobar\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\nRun Code Online (Sandbox Code Playgroud)\n要将其安装到其他虚拟环境pipenv:
myapp$ pipenv install -e /path/to/libraries\n...\nInstalling -e /path/to/libraries...\nAdding foobar to Pipfile\'s [packages]...\n\xe2\x9c\x94 Installation Succeeded \nRun Code Online (Sandbox Code Playgroud)\nmyapp$ cat Pipfile\n[[source]]\nurl = "https://pypi.org/simple"\nverify_ssl = true\nname = "pypi"\n\n[packages]\nfoobar = {editable = true, path = "/path/to/libraries"}\n\n[dev-packages]\n\n[requires]\npython_version = "3.9"\nRun Code Online (Sandbox Code Playgroud)\nmyapp$ pipenv shell\n(myapp) myapp$ python\n>>> import foobar\n>>> foobar.add(1,2)\n3\nRun Code Online (Sandbox Code Playgroud)\n请注意,您不需要使用python setup.py install或pip install .安装软件包的步骤。这里的好处是,如果您现在编辑foobar代码,它会反映在其他环境中,而无需重复pipenv install。
通过运行将其安装到lib/python3.8/site-packages(或pyenv安装包的任何地方)
python setup.py install\nRun Code Online (Sandbox Code Playgroud)\n不会起作用,因为那不是正确的流程。您准备foobar好发行版,然后从发行版安装它,而不是从site-packages安装它,后者已经是已安装的版本(没有 setup.py)。您可能可以通过将整个foobar包复制到您pyenv的site-packages文件夹(包括 setup.py)来解决这个问题,然后告诉pipenv从那里安装它......但这不是正确的流程。
pipenv install -e如果您想测试实际的源代码发行版,另一种方法是实际构建 的源代码发行版foobar,然后pipenv install从中构建。
libraries$ python3.8 setup.py sdist\n...\nCreating tar archive\n...\n\nlibraries$ tree\n.\n...\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dist\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foobar-0.1.0-py3.8.egg\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foobar-0.1.0.tar.gz\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foobar\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\nRun Code Online (Sandbox Code Playgroud)\n(myapp) myapp$ pipenv install /path/to/libraries/dist/foobar-0.1.0.tar.gz\nInstalling /path/to/libraries/dist/foobar-0.1.0.tar.gz...\nRun Code Online (Sandbox Code Playgroud)\n(myapp) myapp$ cat Pipfile\n[[source]]\nurl = "https://pypi.org/simple"\nverify_ssl = true\nname = "pypi"\n\n[packages]\nfoobar = {path = "/path/to/libraries/dist/foobar-0.1.0.tar.gz"}\n\n[dev-packages]\n\n[requires]\npython_version = "3.9"\nRun Code Online (Sandbox Code Playgroud)\n但安装后会失去在其他应用程序上使用它时sdist快速查看更新的便利性。foobar我不知道你的工作流程是什么,但我更喜欢有一个公共目录(libraries),而不是我存储所有本地可编辑包的地方,然后pipenv install从那里开始。