标签: python-packaging

在setup.py脚本中安装nltk数据

我在项目中使用带有wordnet的NLTK.我在我的PC上手动安装,使用pip: pip3 install nltk --user在终端中,然后nltk.download()在python shell中下载wordnet.

我想用setup.py文件来创建它们,但我不知道安装wordnet的好方法.

目前,我在调用之后有这段代码setup.py("nltk"在setup调用列表中"nltk"):

import sys
if 'install' in sys.argv:
    import nltk
    nltk.download("wordnet")
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

python nltk wordnet setup.py python-packaging

14
推荐指数
2
解决办法
2124
查看次数

pyproject.toml 无法使用 setuptools python -m 构建格式找到项目名称

为 a 中的 Python 包提供名称的正确格式是什么pyproject.toml?这是pyproject.toml文件:

[project]
name = "foobar"
version = "0.0.1"

[build-system]
requires = ["setuptools>=40.8.0", "wheel"]
build-backend = "setuptools.build_meta"
Run Code Online (Sandbox Code Playgroud)

调用 using 的构建python -m build会导致以下错误。

running check
warning: check: missing required meta-data: name, url
warning: check: missing meta-data: either (author and author_email) or (maintainer and maintainer_email) should be supplied
Run Code Online (Sandbox Code Playgroud)

基于这个 reddit 帖子问题,我遇到了同样的问题。

python python-3.x python-packaging pyproject.toml

14
推荐指数
1
解决办法
1万
查看次数

pip 安装environment.yml,就好像它是requirements.txt

我有一个environment.yml文件,但不想使用 Conda:

name: foo
channels:
  - defaults
dependencies:
  - matplotlib=2.2.2
Run Code Online (Sandbox Code Playgroud)

是否可以像文件一样pip安装依赖项?environment.ymlrequirements.txt

我尝试过pip install -r environment.yml,但它不适用于pip==22.1.2.

python pip requirements.txt conda python-packaging

14
推荐指数
4
解决办法
1万
查看次数

在 pyproject.toml 中指定测试依赖项并使用 pip install -e 安装它们

我有一个pyproject.toml与下面类似的 Python 项目。我用来python build生成一个用于在生产环境中安装的包。对于开发环境,我使用pip install -e .

我试图弄清楚如何确保为开发环境安装测试依赖项,而不是作为生产环境的一部分。

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[tool.setuptools]
package-dir = {"" = "src"}
packages = [
    "package-a",
    "package-b",
]

[tool.setuptools.package-data]
"*" = [
    "path/to/*.txt"
]

[project]
name = "my-project"
version = "0.0.1"

authors = [
  { name="devnectar", email="a@b.com" },
]

description = "description goes here"
readme = "README.md"
requires-python = ">=3.10"

classifiers = [
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License", …
Run Code Online (Sandbox Code Playgroud)

python setuptools python-packaging pyproject.toml

14
推荐指数
1
解决办法
8245
查看次数

Pip pyproject.toml:可选依赖项组是否需要其他可选依赖项组?

我正在使用最新版本的 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 …

python pip toml python-packaging pyproject.toml

14
推荐指数
1
解决办法
9212
查看次数

如何构建和分发依赖于第三方libFoo.so的Python/Cython包

我编写了一个依赖于某些C扩展的Python模块.这些C扩展依赖于几个已编译的C库.我希望能够分发与所有依赖项捆绑在一起的这个模块.

我把一个最小的例子放在一起(它可以在GitHub上找到它的全部内容).

目录结构是:

$ tree .
.
??? README.md
??? poc
?   ??? __init__.py
?   ??? cython_extensions
?   ?   ??? __init__.py
?   ?   ??? cvRoberts_dns.c
?   ?   ??? cvRoberts_dns.h
?   ?   ??? helloworld.c
?   ?   ??? helloworld.pxd
?   ?   ??? helloworld.pyx
?   ?   ??? test.c
?   ?   ??? test.h
?   ??? do_stuff.c
?   ??? do_stuff.pyx
??? setup.py
Run Code Online (Sandbox Code Playgroud)

setup.py构建扩展和对必需的库链接(libsundials_cvode,libsundials_nvectorserial在这种情况下):

from setuptools import setup, find_packages
from setuptools.extension import Extension
from Cython.Build import cythonize


ext_module_dostuff = Extension( …
Run Code Online (Sandbox Code Playgroud)

python setuptools python-extensions python-packaging

13
推荐指数
1
解决办法
2891
查看次数

缺少'libxml/xmlversion.h'的Pip安装错误

我需要安装python包xmlsec(https://pypi.python.org/pypi/xmlsec)并在我尝试运行时

pip install xmlsec
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

src\xmlsec\constants.c(266) : fatal error C1083: Cannot open include file: 'libxml/xmlversion.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)

当我第一次研究这个错误时,我发现它与安装的lxml包有很多答案.尝试后:

pip install --upgrade lxml
Run Code Online (Sandbox Code Playgroud)

它无法升级,因此我卸载了lxml并再次安装,但出现了IO错误.最后我从http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml下载了lxml文件并将其放在我的python目录中并安装它作为这个问题的答案:安装lxml,libxml2 ,Windows 8.1上的libxslt

它成功上传,当运行pip升级时,它表示它是最新的.

虽然缺少"libxml/xmlversion.h",但尝试安装xmlsec仍然存在同样的错误.有谁知道这里还有什么问题?

注意:我在Windows上使用python 2.7

python pip python-module python-2.7 python-packaging

12
推荐指数
1
解决办法
2万
查看次数

如何使用setuptools_scm?

我不太明白如何使用setuptools-scm

据我了解,这个工具应该根据 SCM(在我的例子中是 git)历史记录得出版本号。它基本上使用距最新标签的距离来获取此信息。

现在,假设我有一个项目,我们在其中工作:我们有maindevelop分支。我们使用 SemVer,因此我们有一个x.y.z版本模式。现在,每当我们提交时develop,我们都希望在我们的包注册表中拥有最新的包。因此,如果主分支上的最新版本是1.2.3例如,我们希望获得1.2.3.dev11.2.3.dev2等。

我实际看到发生的情况是,如果我有1.2.3最新的标签,setuptools-scm 会将下一个版本定义为1.2.4,另外,它会在版本中添加+g532hj..,而注册表等注册表PyPI Test不接受该版本。

有人能具体解释一下它是如何使用的吗?

python pip python-packaging

12
推荐指数
1
解决办法
4822
查看次数

如何在IPython中进行导入

我对有关导入语句在IPython中的工作方式感到有些困惑.我通过网络搜索找不到任何东西.

隐式相对导入适用于Python 2,但我不知道是否仍然是IPython for Python 3的情况.

使用点语法的相对导入似乎根本不起作用:

In [6]: ls 
dsp/  __init__.py  __init__.pyc  utils/

In [7]: from .utils import capture
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-e7d50007bdd1> in <module>()
----> 1 from .utils import capture

ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)

导入使用点语法的模块似乎是不可能的:

In [8]: cd utils
/home/user/workspace/mypkg/mypkg/utils

In [9]: ls
capture/  capture.py  capture.pyc  cext/  __init__.py  __init__.pyc

In [10]: from capture import Capture
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-10-8c31c76d052d> in <module>()
----> 1 from capture import Capture

/home/user/workspace/mypkg/mypkg/utils/capture.py …
Run Code Online (Sandbox Code Playgroud)

python relative-path ipython python-packaging

11
推荐指数
1
解决办法
9868
查看次数

使用 setuptools 和 pyproject.toml 分发 shell 脚本

我正在尝试将 shell 脚本与 Python 包一起分发。理想情况下,shell 脚本在我运行时安装pip install my_package。我从这篇文章中读到,我的预期行为正是scripts关键字 ofsetuptools.setup所提供的。例如,该脚本my_script将使用以下setup.py脚本进行安装:

setup(
    ...
    scripts=['my_script'],
    ... 
) 
Run Code Online (Sandbox Code Playgroud)

但是,我无法使用上述方法,原因有两个:

  1. 官方文档没有提到这种行为。我不知道我是否还能继续这样下去。
  2. 我的整个项目都是建立在pyproject.toml, 没有setup.py. 虽然pyproject.toml已经提供了[project.scripts]表格,但正如setuptools 官方文档中所解释的那样,脚本只能是 python 函数,而不能是 shell 脚本。

为了完整起见,在我的例子中,shell 脚本读取git状态并设置环境变量,这些变量将从我的 python 项目中读取。shell 脚本和我的 python 项目结合得如此紧密,以至于我宁愿不将它们分成两个项目。

我也尝试过使用python函数来执行shell脚本,例如

[project.scripts]
my_script = 'my_project:my_func'
Run Code Online (Sandbox Code Playgroud)
def my_func():
    subprocess.run(...)
Run Code Online (Sandbox Code Playgroud)

这个解决方案的问题是,每次运行my_script,my_project都会加载,并且加载过程非常慢。

setuptools setup.py python-packaging pyproject.toml

11
推荐指数
2
解决办法
2445
查看次数