当前位置: 首页 > 知识库问答 >
问题:

pipenv可以和setup.py?一起使用吗?

艾茂学
2023-03-14

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

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

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

所以我想做的是:

  1. 使用pyenv获取项目特定的python版本:pyenv版本3.8.5
  2. 使用python运行安装程序文件 setup.py 安装 - 说这个软件包叫做foobar - 这将在~/.pyenv/versions/3.8.5/lib/python3.8/foobar中安装软件包(真实名称不是foobar -- 只是在这里用它来说明这一点)
  3. 现在,当我去my_project并运行pibinv安装foobar时 - 我得到以下内容:
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 

不知所措。

共有1个答案

丌官瀚
2023-03-14

我不使用pyenv,但原理是一样的:您有一个可本地安装的包(使用setup . py ), Pipenv通过它的< code>install命令支持这些包,它称它们为可编辑的依赖项。

您可以告诉Pipenv将路径安装为可编辑的-在处理包时,这通常对当前工作目录很有用:

$ pipenv install --dev -e .  
  
$ cat Pipfile  
...  
[dev-packages]  
"e1839a8" = {path = ".", editable = true}
...  

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

libraries$ tree
.
├── foobar
│   └── __init__.py
└── setup.py

要使用< code>pipenv将它安装到其他虚拟环境中:

myapp$ pipenv install -e /path/to/libraries
...
Installing -e /path/to/libraries...
Adding foobar to Pipfile's [packages]...
✔ Installation Succeeded 
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"
myapp$ pipenv shell
(myapp) myapp$ python
>>> import foobar
>>> foobar.add(1,2)
3

请注意,您不需要使用< code > python setup . py install 或< code>pip install安装软件包。。这里的好处是,如果您现在编辑< code>foobar代码,它会反映在其他环境中,而无需重复< code>pipenv install。

通过运行

python setup.py install

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

如果你想测试你的实际源代码分布,那么pibinv安装-e的替代方法是实际构建foobar的源代码分发,然后从中安装pibinv

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
(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...
(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安装会失去在其他html" target="_blank">应用程序上使用它时快速查看foobar更新的便利性。我不知道你的工作流程是什么,但我更喜欢有一个通用的目录(),而不是存储所有本地可编辑的软件包,然后从那里进行pibinv安装

 类似资料:
  • 问题内容: 如果量角器正在替换Angular Scenario Runner进行E2E测试,这是否意味着我仍然可以将其与Karma一起用作我的E2E测试框架? 问题答案: 分度器的当前维护者不建议使用: https://github.com/angular/protractor/issues/9#issuecomment-19927049 量角器和业力不应一起使用;而是为运行测试提供了单独的系统。

  • 问题内容: 我想在我的node.js脚本中使用phantomjs。有一个phantomjs- node 库。.但是不幸的是,作者使用了这个奇怪的coffee脚本代码来解释他在做什么: 现在,如果我直接将phantomjs与javascript一起使用,它将看起来像这样: 所以基本上我想用普通的javascript编写上面代码的第一段代码(通过阅读coffee脚本文档 ..这就是我所做的: 不幸的是

  • 我在官方留档中找不到任何信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significanttext-aggregation.html 问题是,我试图在应用了带状图过滤器/分析器的“多字段”()上聚合重要术语: 我得到了空桶: 多字段定义:

  • 我在两台服务器上使用带有兵马俑的分布式ehcache。在我的缓存管理器中,我有多个缓存。但是现在我有一个要求,每当一个元素被添加到1个服务器上的1个特定缓存中时,我都希望得到第二个服务器上的通知。我尝试使用缓存事件通知程序,但这可以在本地工作。你能不能帮我弄清楚我能做什么。我是否可以将复制机制与 terracotta 一起使用来解决此问题,因为通过在 1 个缓存上使用复制,我将在其他服务器上获取该

  • 问题内容: 是否可以使用Node.js在服务器端使用jQuery选择器/ DOM操作? 问题答案: 似乎有一个重大更新,导致原来的答案不再起作用。我找到了这个答案,解释了现在如何使用。我已经在下面复制了相关代码。 注意:原始答案没有提及你还需要使用安装

  • 我需要一些目前在JavaFX中找不到的功能。比如机器人或托盘图标。 我知道这些工具确实适用于JavaFx应用程序。但是可以使用它们吗?有什么需要我考虑的吗?