我正在尝试将基于setuptools的项目从传统配置迁移setup.py
到现代pyproject.toml
配置。
同时,我希望保持基于 的完善工作流程pip-compile
,即 arequirements.in
被编译为 a requirements.txt
(当然对于最终用户/非库项目)。由于完全透明,这具有重要的好处:
因此,我不想pyproject.toml
通过dependencies = []
列表直接在内部维护依赖项,而是在pip-compiled
托管的外部维护requirements.txt
。
这让我想知道:有没有一种方法可以requirements.txt
在pyproject.toml
配置中引用文件,而不必回退到setup.py
脚本?
自 2022 年中期以来,现在可以取消setup.py
,setup.cfg
转而使用pyproject.toml
. 可编辑安装适用于最新版本的 setuptools 和 pip,甚至官方打包教程setup.py
也从pyproject.toml
.
然而,有关的文档requirements.txt
似乎也已被删除,我想知道现在将固定的需求放在哪里?
回顾一下:过去的常见做法是放置依赖项(没有版本固定),以setup.py
避免当此包与需要相同依赖项但版本要求冲突的其他包一起安装时出现问题。对于打包库来说, asetup.py
通常就足够了。
对于部署(即非库),您通常还提供requirements.txt
版本固定的依赖项。因此,您不会意外地获得该包经过测试的最新、最好的依赖项版本。
所以我的问题是,有什么改变吗?requirements.txt
当与 一起使用时,您仍然将固定的需求放在其中吗pyproject.toml
?或者有一个额外的部分pyproject.toml
吗?某处有相关文档吗?
在下载的时候pip install allennlp==1.0.0 allennlp-models==1.0.0
,我遇到了这样的问题:
[6 lines of output]\n running bdist_wheel\n running build\n running build_py\n running build_ext\n building \'srsly.msgpack._unpacker\' extension\n error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/\n [end of output]\n\n note: This error originates from a subprocess, and is likely not a problem with pip.\n ERROR: Failed building wheel for srsly\n Failed to build thinc blis srsly\n ERROR: Could not build wheels for srsly, which is required to …
Run Code Online (Sandbox Code Playgroud) 我们有多个 python 项目,正在考虑将它们转换为使用pyproject.toml
而不是setup.py
.
有没有一种简单的方法可以自动执行此操作?
我搜索了一下但找不到明确的答案。
目标是拥有两个点指数,一个是私有指数,这将是首要任务。其中之一是标准 PyPI。首要任务是防止代码注入的安全风险。
假设我有一个名为 的库lib
,并且我配置index_url = http://my_private_pypi_repo
并extra_index_url = https://pypi.org/simple
如果 I pip install lib
、 和 都lib
存在于两个索引中。什么索引会优先?将从哪里安装?
另外,如果pip install lib=0.0.2
我的私有索引中存在 0.0.1 版本的 lib。它也会考虑 PyPI 吗?
什么是控制的好方法,某些库仅从私有索引中获取(如果它们存在),并且不会在 PyPI 中查找?
因此,我尝试按照本教程创建一个新的 Python 包:https://packaging.python.org/en/latest/tutorials/packaging-projects/
正如教程所说,在我的pyproject.toml
I 中应该具有以下结构:
[project]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name="Example Author", email="author@example.com" },
]
description = "A small example package"
Run Code Online (Sandbox Code Playgroud)
但是当我用 创建这个文件时poetry init
,它创建了这个结构:
[tool.poetry]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name="Example Author", email="author@example.com" },
]
description = "A small example package"
Run Code Online (Sandbox Code Playgroud)
两者之间的主要区别在于[project]
代替[tool.poetry]
节标题。我还看到,poetry
当没有[tool.poetry]
部分时,这对项目没有任何作用pyproject.toml
这两者有什么区别?
我的 中应该只有一个还是同时有两个pyproject.toml
?如果我应该保留两者,它应该包含什么?
如果应该只有[tool.poetry]
,我是否需要遵循与 相同的内容和子部分规则[project]
?例如, …
setuptools pypi python-packaging python-poetry pyproject.toml
当我尝试从 .tar.gz 包安装时,同时将警告变为错误:
python -W error -m pip install /some/path/nspace.pkga-0.1.0.tar.gz
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ERROR: Exception:
Traceback (most recent call last):
File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/cli/base_command.py", line 169, in exc_logging_wrapper
status = run_func(*args)
^^^^^^^^^^^^^^^
File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/cli/req_command.py", line 248, in wrapper
return func(self, options, args)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/commands/install.py", line 324, in run
session = self.get_default_session(options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/cli/req_command.py", line 98, in get_default_session
self._session = self.enter_context(self._build_session(options))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/cli/req_command.py", line 125, in _build_session
session = PipSession(
^^^^^^^^^^^
File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/network/session.py", line 342, in __init__
self.headers["User-Agent"] = user_agent()
^^^^^^^^^^^^
File …
Run Code Online (Sandbox Code Playgroud) 我正在尝试安装一个工具包,我正在使用 ubuntu 使用 WSL - 我昨天下载了 ubuntu。以下是此工具包的安装过程。 在 Windows cmd 上它说我有 python 3.7.9 但在 ubuntu 上它说我有 python 3.8.2
git clone https://github.com...
cd program
pip install -e .
Run Code Online (Sandbox Code Playgroud)
或者:
pip install program
Run Code Online (Sandbox Code Playgroud)
pip install -e .
对我不起作用,我收到此错误:
user@DESKTOP-REA10BN:~/gym$ pip install -e .
Command 'pip' not found, but there are 18 similar ones.
Run Code Online (Sandbox Code Playgroud)
但是,我检查并安装了 pip,这是我在运行之前检查的内容:
user@DESKTOP-REA10BN:~$ cd\
> sudo apt-get install python-pip
cdsudo: command not found
user@DESKTOP-REA10BN:~$ python3 --version
Python 3.8.2
user@DESKTOP-REA10BN:~$ python3-pip --version
python3-pip: command not found
user@DESKTOP-REA10BN:~$ which pip3
/usr/bin/pip3 …
Run Code Online (Sandbox Code Playgroud) 我正在使用最新版本的 pip 23.01
,. 我有一个pyproject.toml
包含依赖项和可选依赖项组(又名“额外”)的文件。为了避免冗余并使管理可选依赖项组更容易,我想知道如何让可选依赖项组需要其他可选依赖项组。
我有一个pyproject.toml
可选依赖项组在依赖项中有冗余重叠的情况。我想他们可以用“等级制”来形容。它看起来像这样:
[project]
name = 'my-package'
dependencies = [
'pandas',
'numpy>=1.22.0',
# ...
]
[project.optional-dependencies]
# development dependency groups
test = [
'my-package[chem]',
'pytest>=4.6',
'pytest-cov',
# ...
# Redundant overlap with chem and torch dependencies
'rdkit',
# ...
'torch>=1.9',
# ...
]
# feature dependency groups
chem = [
'rdkit',
# ...
# Redundant overlap with torch dependencies
'torch>=1.9',
# ...
]
torch = [
'torch>=1.9',
# ...
]
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,pip install …
我在 GitHub 上有一个带有 tox.ini 文件的项目:
[tox]
envlist = py3
[testenv]
deps = -rrequirements.txt
commands =
pytest --doctest-modules
Run Code Online (Sandbox Code Playgroud)
效果很好。但是当我用“py37”替换“py3”时,它失败并出现错误:
ERROR: py37: InterpreterNotFound: python3.7
Run Code Online (Sandbox Code Playgroud)
据我所知,tox应该支持Python 3.7。这是 github 上的 tox 特有的问题吗?