如何确保 python 个二进制文件在你的路径上?

How to ensure python binaries are on your path?

我正在尝试使用 Kaggle api。我已经使用 pip 下载了 kaggle 并将 kaggle.json 移动到 ~/.kaggle,但我无法在命令提示符下 运行 kaggle。它没有被识别。我怀疑这是因为我没有完成“确保 python 二进制文件在你的路径上”这一步骤,但老实说我不确定这意味着什么。这是我尝试下载数据集时的错误消息:

>>> sys.version
'3.9.1 (tags/v3.9.1:1e5d33e, Dec  7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)]'
>>> import kaggle
>>> kaggle datasets list -s demographics
  File "<stdin>", line 1
    kaggle datasets list -s demographics
           ^
SyntaxError: invalid syntax

kaggle 是 python 模块,但它还应该安装具有相同名称的脚本 kaggle,您可以 运行 在 console/terminal/powershell/cmd.exe 作为

kaggle datasets list -s demographics

但这不是您可以在 Python Shell 或 Python 脚本中 运行 的代码。

如果您找到此脚本 kaggle 并在编辑器中打开它,那么您可以看到它从 kaggle.cli 导入 main 并且它 运行s main()

这可以在自己的脚本中使用,如

import sys
from kaggle.cli import main

sys.argv += ['datasets', 'list', '-s', 'demographics']
main()

但此方法直接在 screen/console 上发送结果,它需要将自己的 class 分配给 sys.stdout 才能在变量中捕获此文本。

像这样:

import sys
import kaggle.cli

class Catcher():
    def __init__(self):
        self.text = ''
        
    def write(self, text):
        self.text += text
 
    def close(self):
        pass
    
catcher = Catcher()    

old_stdout = sys.stdout  # keep old stdout
sys.stdout = catcher     # assing new class

sys.argv += ['datasets', 'list', '-s', 'demographics']
result = kaggle.cli.main()

sys.stdout = old_stdout  # assign back old stdout (because it is needed to run correctly `print()`

print(catcher.text)

在脚本中挖掘源代码 kaggle 我知道你可以使用

做同样的事情
import kaggle.api

kaggle.api.dataset_list_cli(search='demographics')

但这也直接发送到 screen/console。


编辑:

您可以获得特殊对象列表的结果,稍后您可以使用 for-loop

import kaggle.api

result = kaggle.api.dataset_list(search='demographics')
                                 
for item in result:
    print('title:', item.title)
    print('size:', item.size)
    print('last updated:', item.lastUpdated)
    print('download count:', item.downloadCount)
    print('vote count:', item.voteCount)
    print('usability rating:', item.usabilityRating)
    print('---')