我对 python 不太熟悉,我只用它做过自动化,所以我对包和其他东西都是新手。
\n我正在使用 Flask、Gunicorn 和 Poetry 创建一个 API。
\n我注意到 pyproject.toml 中有一个版本号,我想创建一个路由 /version 来返回我的应用程序的版本。
\n我的应用程序结构如下所示:
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 poetry.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tests\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wsgi.py\nRun Code Online (Sandbox Code Playgroud)\nwsgi.py运行应用程序的主文件在哪里。
我看到人们使用 importlib 但我没有找到如何让它工作,因为它与以下命令一起使用:
\n __version__ = importlib.metadata.version("__package__")
\n但我不知道这个包的含义。
我有一个pyproject.toml并且我已经做了poetry init(显然)并且poetry install.
如果我手动更改 toml 文件,我到底需要做什么?
一方面,我认为我必须同步poetry.lock文件,但我是否要删除它并再次安装?对于编辑 toml 文件后如何继续,我有相互矛盾的想法。
poetry add另外,如果我执行 a而不是手动编辑 toml,过程是否相同?
VSCode 默认支持许多虚拟环境,并且这些环境的文件是可搜索的。然而,我正在使用Poetry,它的库似乎没有出现在搜索中。
.vscode/settings.json我通过更改项目目录来手动设置 Python 解释器。(因为命令面板Python: Select interpreter也不起作用。
{
"python.pythonPath": "~\\AppData\\Local\\pypoetry\\Cache\\virtualenvs\\finance-essentials-37-64-58e2e1Bc-py3.7\\Scripts"
}
Run Code Online (Sandbox Code Playgroud)
我想让文件在~\AppData\Local\pypoetry\Cache\virtualenvs\finance-essentials-37-64-58e2e1Bc-py3.7\Lib\site-packages我的命令 pelette 和代码上下文中可搜索,以便我可以轻松查找库源。
我该怎么做呢?
我目前有一个 Python3 项目,设置了 Poetry 作为主要的包管理器。除此之外,我还通过 Github 工作流设置了构建和一些自动化测试。我的包依赖于 Tensorflow,尽管自动化测试可以在没有它的情况下运行。不幸的是,每次 Github 工作流运行这些测试时都会安装 Tensorflow(相当大)。由于这些测试不需要 Tensorflow 并且我想加快构建速度,因此我想在以下情况下忽略 Tensorflow 依赖项poetry install从构建管道调用。
有人知道在使用 Poetry 时排除依赖项的方法吗?
我正在使用 Poetry 来管理我的 Python 项目(依赖项、包等),并且我正在尝试从 Flask 文档实现四行 hello world:https: //flask.palletsprojects.com/en/1.1.x/模式/包/#simple-packages
我的文件夹结构如下所示:
myproject/
.venv/
myproject/
__init__.py
views.py
poetry.lock
pyproject.toml
README.rst
Run Code Online (Sandbox Code Playgroud)
这两个文件,init.py:
import myproject.views
__version__ = '0.1.0'
from flask import Flask
app = Flask(__name__)
Run Code Online (Sandbox Code Playgroud)
和views.py:
from myproject import app
@app.route('/')
def index():
return 'hello world'
Run Code Online (Sandbox Code Playgroud)
然而,当我运行 export FLASK_APP=myproject 和 FLASK_ENV=development 并执行flask run并将我的浏览器指向端口时,它说
flask.cli.NoAppException
flask.cli.NoAppException: While importing "myproject", an ImportError was raised:
Traceback (most recent call last):
File "/myproject/.venv/lib/python3.9/site-packages/flask/cli.py", line 240, in locate_app
__import__(module_name)
File "/myproject/myproject/__init__.py", line 1, in …Run Code Online (Sandbox Code Playgroud) 我经常想使用我自己的个人Python项目来进行日常使用。在 golang 中,我可以运行go install project.go并将编译后的二进制文件发送到~/go/bin(位于我的 PATH 中)。现在我可以在系统中的全球任何地方运行我的程序。Python 和 Poetry 中有对应的吗?
我可能可以通过编写一个脚本来解决这个问题,该脚本运行一些东西poetry run $project并将该脚本放入我的路径之一。但我想知道的是,Python 和 Poetry 中是否有一种标准方法可以做到这一点。
pip install program我想要的是类似于我自己的项目的东西。
现在,我每次想运行程序时都需要cd进入我的项目文件夹并运行,这确实很麻烦。poetry run $project
在 Windows 默认命令 shell (cmd.exe) 中,您可以使用各种控件访问键入命令的历史记录(向上箭头表示最近的命令等)。
当您使用“poetry shell”命令生成一个新的虚拟环境时,您会生成一个新的 shell,但历史命令(如向上箭头和 F7)不起作用,如果您运行 doskey /history,它会为您提供命令历史记录从运行“poetry shell”命令之前开始。
如果您运行 cmd.exe 来生成另一个 shell,这也会禁用历史记录。
关于为什么会发生这种情况或者如何获得禁用历史记录的命令 shell 有什么想法吗?
谢谢
我在 Poetry 管理的虚拟环境中安装 GDAL 时遇到问题(在 Ubuntu 18.04 发行版上工作)。
我已经发现的是:
对于“标准”安装,有一些使用“导出”命令处理本地路径的示例。
到目前为止,我还没有找到任何关于如何在诗歌项目中安装 GDAL 的有效示例。
有人知道如何处理这个问题吗?(或者这是否可能?)
我想安装feastpython 包poetry。
pip3 install git+https://github.com/feast-dev/feast#subdirectory=sdk/python工作正常,
但poetry add git+https://github.com/feast-dev/feast#subdirectory=sdk/python给出了一个错误:
CalledProcessError\n\n Command '['git', '--git-dir', '/tmp/pypoetry-git-feas51ct2_me/.git', '--work-tree', '/tmp/pypoetry-git-feas51ct2_me', 'checkout', 'subdirectory=sdk/python']' returned non-zero exit status 1.\n\n at /usr/lib/python3.8/subprocess.py:516 in run\n 512\xe2\x94\x82 # We don't call process.wait() as .__exit__ does that for us.\n 513\xe2\x94\x82 raise\n 514\xe2\x94\x82 retcode = process.poll()\n 515\xe2\x94\x82 if check and retcode:\n \xe2\x86\x92 516\xe2\x94\x82 raise CalledProcessError(retcode, process.args,\n 517\xe2\x94\x82 output=stdout, stderr=stderr)\n 518\xe2\x94\x82 return CompletedProcess(process.args, retcode, stdout, stderr)\n 519\xe2\x94\x82 \n 520\xe2\x94\x82 \nRun Code Online (Sandbox Code Playgroud)\n我该如何修复它?
\n我正在尝试弄清楚如何使用 pex 对 python 项目进行自动化(ish)部署。我目前有以下流程:
$ poetry run pip freeze > requirements.txt
manually remove this-project line from requirements.txt
$ poetry run pex -r requirements.txt -o service.pex -e api:start --sources-directory=.
$ ./service.pex
Run Code Online (Sandbox Code Playgroud)
第二步的原因是,this-project如果我将该行留在其中,pex 将尝试在线查找。我理解这一点,但pip freeze确实将该行插入到requirements.txt. 我想知道的是:pex可以使用pyproject.toml还是poetry.lock直接使用?当前的解决方案是一种烦人的解决方案。
我看过2019 年教程,但它不起作用,因为当前版本的 pex 无法识别--project为选项。
任何其他建议将不胜感激。
python-poetry ×10
python ×7
deployment ×1
flask ×1
gdal ×1
pip ×1
python-pex ×1
shell ×1
windows ×1