pipenv
如果使用第3方dev依赖项以及将其捆绑在一起的脚本,则可以直接与一起发布,请参见下文。
免责声明:我仅在’NIX系统(尤其是OSX)上拥有这些软件包管理器的经验,
pipenv将Windows视为头等公民,这让我自己市场,我不确定在没有
pyenvWindows的情况下它是如何工作的,就Windows而言,到目前为止我知道。基本用法pipenv:
要充分利用
pipenv,
pyenv应安装。即使未激活,也
pipenv将能够检测和使用随python安装的任何版本
pyenv。例如,如果a
Pipfile列出了python
3.4作为要求:要成功运行
pipenv install,
pyenv install 3.4.0应首先运行。
创建一个新的
Pipfilevenv(使用python 3.7.x):
>>> pipenv --python 3.7
或
Pipfile.lock使用以下命令安装现有的依赖项。此命令还可用于创建
Pipfile和venv(默认为最新的可用python版本)。
>>> pipenv install
要在创建的venv中运行命令:
>>> pipenv run <script or command>
例如
诗歌>>> pipenv run python main.py
诗歌仍然在使用,
pyenv但使用的方式有所不同:您必须在调用
poetry install或之前激活要使用的python版本
poetry run。
一个
pyproject.toml可以使用创建的:
>>> poetry init
或可以使用以下方法创建完整的目录结构:
>>> poetry new <dir>
在安装之前,我们必须激活一个与
pyproject.toml文件中指定内容匹配的python版本。
>>> pyenv global <python version specified in pyproject.toml>
现在,我们可以使用以下命令创建venv,如果存在
poetry.lock文件,它将安装其中列出的所有依赖项。
>>> poetry install
要在创建的venv中运行命令:
>>> poetry run <command>
如果使用更改全局python版本
pyenv,则将不再能够在创建的venv中运行命令。如果我们使用本地创建的venv,则有一个例外,请参见下文。使用不同的python版本运行代码
有时,最好检查一下您的代码在python 3.7和python 3.4上都可以使用。这不是我们可以理所当然的事情。
吹牛只有通过使用其他python版本重新创建venv才能删除它:
>>> rm -rf <path to venv>>>> pipenv --python <different python version>
可能会显示警告,表明venv的python版本与中指定的venv不匹配
Pipfile,但据我所知,这仅仅是警告。
https://github.com/pypa/pipenv/issues/1071
诗歌诗歌更适合此用例:可以并排创建多个venv。要使用来创建和使用新的venv开关python版本,
pyenv然后创建一个新的venv。
>>> pyenv global <different python version>>>> poetry install
如果python版本与python中指定的版本不匹配,则会引发错误,
pyproject.toml但是可以使用semver版本控制指定一系列python版本。本地静脉
我更喜欢将venv安装在
.venv项目本地的文件夹中,这类似于
npm工作原理,并且允许我删除该文件夹并在发生任何奇怪的情况下或者如果我想轻松更改哪个版本(如果是pipenv的话)重新安装我正在使用的Python。吹牛
要启用此功能:设置以下环境变量。
诗歌>>> export PIPENV_VENV_IN_PROJECT="enabled"
可以使用以下命令启用此功能:
>>> poetry config settings.virtualenvs.in-project true
但是请注意,这将改变的行为
poetry,将不再可能在不同版本的python之间进行快速切换:即使使用
pyenv所有运行的命令切换了python版本,
poetryrun也会使用venv(及其相关的python版本)驻留在本地目录中。
https://github.com/sdispater/poetry/issues/108
安装套件吹牛软件包易于安装,
Pipfile并
Pipfile.lock可以使用以下方法自动添加到和文件中:
>>> pipenv install [--dev] <package name>
该
--dev标志指示开发依赖性。使用时,默认情况下不会安装开发依赖项
pipenv install。
也可以安装本地软件包,使您可以使用它们并立即查看更改:
诗歌>>> pipenv install -e <path to local package>
软件包易于安装,
pyproject.toml并
poetry.lock可以使用以下方法自动添加到和文件中:
>>> poetry add [--dev] <package name>
该
--dev标志指示开发依赖关系,在使用时默认情况下不会安装开发依赖关系,
poetry install在发布时不会将其添加到程序包中。
也可以安装本地软件包,使您可以使用它们并立即查看更改:
>>> poetry add --path <path to local package> <name of package>
不确定为什么需要软件包名称,因为它应该已经由本地软件包定义。同样,作者似乎对一般情况下链接本地程序包不信服(https://github.com/sdispater/poetry/issues/34),因此随着时间的流逝,此功能可能会被遗忘。
运行脚本为了清楚起见,我指的是
npm所谓的脚本,这与
setup.py文件内指定的脚本不同。
在开发时,有时为难以记住的命令设置快捷方式很有用,例如,用于运行目录中每个测试文件的命令为:
>>> python -m unittest discover -s <test_folder> -p '*_test.py'
拥有这些命令的快捷方式要方便得多。
吹牛支持此功能:将以下内容放入
Pipfile:
诗歌[scripts] test = "pipenv run python -m unittest discover -s tests -p '*_test.py'"
不支持,将来不太可能添加:https
:
//github.com/sdispater/poetry/pull/591#issuecomment-504762152
最好能够发布到PyPi而不编写其他
setup.py文件,如果发布包所需的所有信息都包含在包管理文件中,则可能会这样做。吹牛
据我所知,这是pipenv在哪里获得不良声誉的地方。
setup.py仍然需要将文件发布到PyPi,不,它们不会自动使用的依赖项进行填充
Pipfile。
推荐的方法是在发布时手动复制依赖项,或者获取Pipfile来安装
setup.py文件中列出的依赖项,但是,
setup.py运行时不会自动更新
pipenvinstall <package name>。
如果您确实希望
Pipfile依赖于
setup.py文件,则可以这样做:
>>> pipenv install '-e .'
https://github.com/pypa/pipenv/issues/2805,https://realpython.com/pipenv-
guide/#yes-i-need-to-distribute-my-pre-as-a-
package,HTTPS
://github.com/pypa/pipenv/issues/209
!
因此,理想情况下,我们希望从中获取
setup.py文件
Pipfile:
我发现有两个声称可以做到这一点的软件包:
https://pypi.org/project/pipenv-tools/-但是两年来没有更新,
src
目录中没有代码,我无法正常工作。https://pypi.org/project/pipenv-setup/-但是它同步
Pipfile.lock
而不是Pipfile
,这是一种反模式。锁定文件用于创建可重现的环境,它用于的限制过于严格(例如,不允许更新依赖项)setup.py
。因此,我什至没有尝试使用它。
我的解决方案:
我迅速编写了一个程序包,该程序包生成
install_requires.py可以导入
setup.py文件的文件:https
:
//pypi.org/project/pipenv2setup/(在Windows上未经测试)。
有关在发布pipenv项目时如何使用软件包的示例,请参见以下github存储库:
https://github.com/alanbacon/pipenv示例
诗歌用诗歌出版您的包裹真的很容易,您根本不需要
setup.py文件。只需运行:
>>> poetry publish [--build] [--username <username>] [--password <password>]
不仅可以使用
pip的其他实例来安装已发布的软件包
poetry。
有关如何从使用文件迁移
setup.py到纯
pyproject.toml文件的信息,请参见此处:https : //johnfraney.ca/posts/2019/05/28/create-
publish-python-package-poetry/IntelliJ或Pycharm集成吹牛
Pycharm可以通过使用
Piplock文件来检测venv ,但是使用Pycharm界面添加新软件包不会修改
Piplock文件。诗歌
在撰写本文时,Pycharm似乎并不了解任何诗歌虚拟环境,或似乎无法
pyproject.toml以任何方式解析文件。关于诗歌的其他要点森弗
在其中,
poetry您必须使用semver(必须使用
~和
^,而不是
>=
或
<)https://nodesource.com/blog/semver-tilde-and-
caret指定python和软件包的版本。蓬松度
poetry使用python运行,但不适用于旧版本的python。因此,要开发旧版本的python:必须将某些命令
pyenv设置为>
3.6,然后将
pyenv其切换回旧版本以创建venv。看来venvs必须大于3.5。
https://github.com/sdispater/poetry/issues/1223
也不确定Windows的兼容性
poetry。结论
对我而言,
poetry和之间的主要区别
pipenv在于它们对的使用
pyenv以及它们直接发布到的能力(或缺乏)
PyPi。
poetry我个人也觉得缺乏脚本感到沮丧。
我发现使用时
poetry,在python环境之间使用时会有更多切换
pyenv。尽管当前可以通过使用本地安装venv来缓解这种情况。我知道这限制了我在不同的python环境中快速测试代码的能力,但是还有其他工具
tox可以做到这一点。
发布
PyPi使用
poetry非常容易,我在上面一行中做了解释。与
PyPi一起发布
pipenv是一个雷区,要说明这一点,我不得不链接到整个git
repo(上文)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)