我在项目中使用带有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)
有一个更好的方法吗?
为 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 帖子问题,我遇到了同样的问题。
我有一个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.
我有一个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) 我正在使用最新版本的 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 …
我编写了一个依赖于某些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包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
我不太明白如何使用setuptools-scm。
据我了解,这个工具应该根据 SCM(在我的例子中是 git)历史记录得出版本号。它基本上使用距最新标签的距离来获取此信息。
现在,假设我有一个项目,我们在其中工作:我们有main和develop分支。我们使用 SemVer,因此我们有一个x.y.z版本模式。现在,每当我们提交时develop,我们都希望在我们的包注册表中拥有最新的包。因此,如果主分支上的最新版本是1.2.3例如,我们希望获得1.2.3.dev1、1.2.3.dev2等。
我实际看到发生的情况是,如果我有1.2.3最新的标签,setuptools-scm 会将下一个版本定义为1.2.4,另外,它会在版本中添加+g532hj..,而注册表等注册表PyPI Test不接受该版本。
有人能具体解释一下它是如何使用的吗?
我对有关导入语句在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) 我正在尝试将 shell 脚本与 Python 包一起分发。理想情况下,shell 脚本在我运行时安装pip install my_package。我从这篇文章中读到,我的预期行为正是scripts关键字 ofsetuptools.setup所提供的。例如,该脚本my_script将使用以下setup.py脚本进行安装:
setup(
...
scripts=['my_script'],
...
)
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用上述方法,原因有两个:
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都会加载,并且加载过程非常慢。
python-packaging ×10
python ×9
pip ×4
setuptools ×3
setup.py ×2
conda ×1
ipython ×1
nltk ×1
python-2.7 ×1
python-3.x ×1
toml ×1
wordnet ×1