小编sin*_*roc的帖子

如何获取当前的“包”名称?(setup.py)

如何获取当前最顶层的包,即setup.py 中定义的名称?

这是我的tree:

.
|-- README.md
|-- the_project_name_for_this_pkg
|   |-- __init__.py
|   |-- __main__.py
|   |-- _config
|   |   `-- foo.conf
|   |-- _data
|   |   `-- logging.yml
|   `-- tests
|       |-- __init__.py
|       `-- test_foo.py   <--- # executing from here
|-- requirements.txt
`-- setup.py

4 directories, 9 files
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经开始工作的唯一解决方案是:

import os
import sys


os.path.basename(sys.path[1])
Run Code Online (Sandbox Code Playgroud)

但这显然是一个糟糕的解决方案。其他解决方案,例如__name__在我最上层的__init__.py文件中使用a并ast.parse用于阅读 的相关部分setup.py也似乎很麻烦。

我尝试过的其他解决方案 - 通过在我的python [子] 包中的unittest.TestCase继承class中调用它们tests- 包括检查 …

python setuptools python-packaging

9
推荐指数
1
解决办法
3810
查看次数

查找哪个Python包提供了特定的导入模块

不要感到困惑,有大量关于安装 Python 包、如何导入生成的模块以及列出可用包的问题。但是,如果您没有pip--what-provides样式文件或Pipenv Pipfile ,则似乎没有与 pip 等效的选项。此问题与上一个问题类似,但要求提供父包,而不是其他元数据。也就是说,这些其他问题没有得到很多关注或得到许多接受的答案 - 例如。如何查找给定模块的 python 包元数据信息。就这样砥砺前行……requirements.txt

举例来说,有两个包(仅举几例)将安装名为的模块serial- 即pyserial和serial。因此,假设安装了其中一个软件包,我们可以使用 pip list 找到它:

python3 -m pip list | grep serial
Run Code Online (Sandbox Code Playgroud)

但是,如果包的名称与模块的名称不匹配,或者您只是想找出要安装的包(在旧服务器或开发计算机上工作),就会出现问题。

您可以检查导入模块的路径 - 这可以给您提供线索。但继续这个例子......

>>> import serial
>>> print(serial.__file__)
/usr/lib/python3.6/site-packages/serial/__init__.py
Run Code Online (Sandbox Code Playgroud)

它位于一个serial目录中,但实际上只安装了pyserial ,而不是serial:

>>> import serial
>>> print(serial.__file__)
/usr/lib/python3.6/site-packages/serial/__init__.py
Run Code Online (Sandbox Code Playgroud)

我能想到的最接近的是生成一个可能在依赖子文件上失败的requirements.txtvia (就像我所做的那样),或者通过Pipenvpipreqs ./反向检查依赖关系(这会带来一整套新问题来完成所有设置):

> python3 -m pip list | grep serial
pyserial …
Run Code Online (Sandbox Code Playgroud)

python pip python-import python-importlib python-packaging

8
推荐指数
1
解决办法
2128
查看次数

如何使用 pip 在可编辑模式下安装 setup.cfg + pyproject.toml python 项目?

是否可以将蛋糕减半并吃掉它:可以安装(通过某种机制)具有以下结构的项目:

pyproject.toml
setup.cfg
src/...
scripts/...
Run Code Online (Sandbox Code Playgroud)

在可编辑模式下,就像使用标准setup.py项目一样:

python3 -m pip install -e . 
Run Code Online (Sandbox Code Playgroud)

(如果答案是:“ one does not install pyproj.toml packages in editable mode ”也可以)

setuptools python-packaging pyproject.toml pep517

8
推荐指数
1
解决办法
139
查看次数

Python诗歌,安装可选依赖项

我只想要这样的诗歌:

$ pip install pydantic[email]
Run Code Online (Sandbox Code Playgroud)

我已阅读所有相关帖子。现在我的pyproject.toml看起来像这样(我也尝试了其他所有方法):

[tool.poetry.dependencies]
pydantic = {version = "*", optional = true, extras = ["email"]}
...

[tool.poetry.extras]
email = ["pydantic"]
Run Code Online (Sandbox Code Playgroud)

我还删除了.venv,poetry.lock然后$ poetry install。没有用。运行时错误很明显:

ImportError: email-validator is not installed, run `pip install pydantic[email]`
Run Code Online (Sandbox Code Playgroud)

我可以添加一个细节:它本身就是一种依赖项(在我遇到这个问题之前pydantic它是不存在的)。pyproject.toml

python-packaging python-poetry

8
推荐指数
1
解决办法
9109
查看次数

如何在命令行 (Python) 获取 `setup.cfg` 元数据

当你有一个setup.py文件时,你可以通过以下命令获取包的名称:

C:\some\dir>python setup.py --name
Run Code Online (Sandbox Code Playgroud)

这会将包的名称打印到命令行。

为了遵循最佳实践,我试图setup.py通过将所有内容放入其中来迁移setup.cfg,因为以前的所有内容setup.py都是静态内容。

但我们的构建管道依赖于能够调用python setup.py --name. 我希望以不需要创建setup.py文件的方式重写管道。

setup.cfg当您有文件但没有文件时,有没有办法获取包的名称setup.py?

python setuptools setup.py python-packaging

8
推荐指数
2
解决办法
3097
查看次数

Windows 上的 Pip 安装无法结合“--user”和“--target”

我试图在命令下运行,但它在我的 Windows 机器上不起作用。

C:\Users\XXX\Desktop\python-7>pip install chalice -t .
ERROR: Can not combine '--user' and '--target'

C:\Users\XXX\Desktop\python-7>pip install --user --install-option="--prefix=" chalice -t .
ERROR: Can not combine '--user' and '--target'
Run Code Online (Sandbox Code Playgroud)

有人可以让我知道是否有其他方法可以将模块放在同一目录中吗?

更新

C:\Users\XXX\Desktop\python-7>pip install --target=C:\Users\XXX\Desktop\python-7 chalice
ERROR: Can not combine '--user' and '--target'
Run Code Online (Sandbox Code Playgroud)

pip

7
推荐指数
2
解决办法
1930
查看次数

如何选择或更改 pudb(Python 调试器)上的主题?

我一直在使用 pudb 来调试 python 代码,它非常直接进入终端。但我一点也不喜欢它的颜色。

如下图所示。

我在文件夹里面找到了

.local/lib/python3.8/site-packages/pudb 
Run Code Online (Sandbox Code Playgroud)

文件名theme.py但即使尝试更改它也没有任何反应

经典主题

python debugging pudb

7
推荐指数
1
解决办法
1774
查看次数

pyproject.toml 中“[tool.setuptools.packages] find = {}”的功能

用于为包注册表打包 Python 项目的 GitLab 说明指示用户创建包含以下内容的 pyproject.toml 文件:

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

[project]
name = "mypypipackage"
version = "0.0.1"
authors = [
    { name="Example Author", email="author@example.com" },
]
description = "A small example package"
requires-python = ">=3.7"
classifiers = [
   "Programming Language :: Python :: 3",
   "Operating System :: OS Independent",
]

[tool.setuptools.packages]
find = {}
Run Code Online (Sandbox Code Playgroud)

find = {}谁能解释一下底部的功能是什么?GitLab 指南没有解释,我似乎找不到任何相关文档。

当然,.toml 文件按照指示工作得很好,但在不[tool.setuptools.packages]完全包含该部分的情况下它似乎也工作得很好。

python setuptools pypi python-packaging

7
推荐指数
1
解决办法
6717
查看次数

使用Poetry导出requirements.txt时如何省略依赖

我有一个 Python3 Poetry 项目,其中有一个pyproject.toml指定依赖项的文件:

[tool.poetry.dependencies]
python = "^3.10"
nltk = "^3.7"
numpy = "^1.23.4"
scipy = "^1.9.3"
scikit-learn = "^1.1.3"
joblib = "^1.2.0"

[tool.poetry.dev-dependencies]
pytest = "^5.2"
Run Code Online (Sandbox Code Playgroud)

我requirements.txt使用命令将这些依赖项导出到文件中poetry export --without-hashes -f requirements.txt --output requirements.txt,生成以下文件requirements.txt:

click==8.1.3 ; python_version >= "3.10" and python_version < "4.0"
colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Windows"
joblib==1.2.0 ; python_version >= "3.10" and python_version < "4.0"
nltk==3.8.1 ; python_version >= "3.10" and python_version …
Run Code Online (Sandbox Code Playgroud)

python pip requirements.txt python-poetry

7
推荐指数
1
解决办法
6513
查看次数

警告:“news”是 pyproject.toml 中定义的入口点,但它没有作为脚本安装。你可能会得到不正确的 `sys.argv[0]`

    \n
  • 我正在尝试使用 docker compose 在 docker 中运行我的基于诗歌的 python 项目
  • \n
  • 当我运行该应用程序时,它可以工作,但它给了我这个警告
  • \n
\n
ch_news_dev_python          | Warning: 'news' is an entry point defined in pyproject.toml, but it's not installed as a script. You may get improper `sys.argv[0]`.\nch_news_dev_python          | \nch_news_dev_python          | The support to run uninstalled scripts will be removed in a future release.\nch_news_dev_python          | \nch_news_dev_python          | Run `poetry install` to resolve and get rid of this message.\n
Run Code Online (Sandbox Code Playgroud)\n

我的项目结构

\n
news\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 development\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 python_server\n\xe2\x94\x82   \xe2\x94\x82 …
Run Code Online (Sandbox Code Playgroud)

python docker dockerfile python-packaging python-poetry

7
推荐指数
1
解决办法
4182
查看次数