首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在setup.py中使用pipenv?

是否可以在setup.py中使用pipenv?
EN

Stack Overflow用户
提问于 2020-08-26 01:58:45
回答 1查看 3.2K关注 0票数 3

正如标题所述--我可以使用setup.py和pipenv以及pyenv来管理我的环境、版本和依赖项吗?

我有一个带有setup.py文件的目录结构形式的python包。

我喜欢使用pipenv作为我的项目环境经理--我使用pyenv来管理我的多个python版本。

所以我想做的是:

  1. 使用pyenv获得一个项目规范-- python版本:pyenv version 3.8.5
  2. 使用python安装运行setupfile --假设这个包称为foobar --它将包安装在~/..pyenv/ setup.py /3.8.5/lib/python3.8/ foobar中(实名不是foobar --仅用这里来说明这一点)。
  3. 现在,当我转到my_project并运行pipenv安装foobar时--我得到以下信息:
代码语言:javascript
复制
pipenv install foobar
Installing foobar…
Error:  An error occurred while installing foobar!
Error text:
ERROR: 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)
ERROR: No matching distribution found for foobar (from -r /var/folders/2d/f68m9g153v9cywvjn16hs6nc0000gn/T/pipenv-4uv_ikyt-requirements/pipenv-asuqkc7y-requirement.txt (line 1))

✘ Installation Failed 

茫无所知。

EN

回答 1

Stack Overflow用户

发布于 2021-01-09 08:09:37

我不使用pyenv,但原则是相同的:您有一个本地可安装的包(使用setup.py),Pipenv确实支持使用它的install命令的包,并将它们称为可编辑依赖

您可以告诉Pipenv将路径安装为可编辑的--在处理包时,这通常对当前的工作目录很有用: $ pipenv install -e。小猫文件..。包"e1839a8“= {path = ".",可编辑=真}.

让我们从一个foobar文件夹中获取您的libraries

代码语言:javascript
复制
libraries$ tree
.
├── foobar
│   └── __init__.py
└── setup.py

使用pipenv将其安装到其他虚拟环境中

代码语言:javascript
复制
myapp$ pipenv install -e /path/to/libraries
...
Installing -e /path/to/libraries...
Adding foobar to Pipfile's [packages]...
✔ Installation Succeeded 
代码语言:javascript
复制
myapp$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
foobar = {editable = true, path = "/path/to/libraries"}

[dev-packages]

[requires]
python_version = "3.9"
代码语言:javascript
复制
myapp$ pipenv shell
(myapp) myapp$ python
>>> import foobar
>>> foobar.add(1,2)
3

注意,您不需要使用pip install .安装软件包的步骤。这里的好处是,如果您现在编辑foobar代码,它就会在另一个环境中得到反映,而不需要重复的pipenv install

通过运行lib/python3.8/site-包(或任何pyenv安装包的地方)将其安装到

代码语言:javascript
复制
python setup.py install

不会起作用,因为这不是正确的流程。您可以准备发行版的foobar,然后从发行版安装它,而不是从站点包安装它,后者已经安装了版本(没有setup.py)。您可能可以通过将整个foobar包复制到pyenv的site-packages文件夹(包括setup.py)来解决这个问题,然后告诉pipenv从那里安装它.但这不是正确的流程。

如果您想测试实际的源发行版,pipenv install -e的另一种选择是实际构建foobar的源发行版,然后从该版本构建pipenv install

代码语言:javascript
复制
libraries$ python3.8 setup.py sdist
...
Creating tar archive
...

libraries$ tree
.
...
├── dist
│   ├── foobar-0.1.0-py3.8.egg
│   └── foobar-0.1.0.tar.gz
├── foobar
│   └── __init__.py
├── ...
└── setup.py
代码语言:javascript
复制
(myapp) myapp$ pipenv install /path/to/libraries/dist/foobar-0.1.0.tar.gz
Installing /path/to/libraries/dist/foobar-0.1.0.tar.gz...
代码语言:javascript
复制
(myapp) myapp$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
foobar = {path = "/path/to/libraries/dist/foobar-0.1.0.tar.gz"}

[dev-packages]

[requires]
python_version = "3.9"

但是,从sdist安装时,当您在其他应用程序上使用它时,它就失去了快速查看foobar更新的方便。我不知道您的工作流是什么,但是我更喜欢有一个公共目录(libraries),而不是存储所有本地可编辑的包,然后从那里存储pipenv install-ing。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63589425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档