【问题标题】:Issue with pants build tool on a "Hello World" example“Hello World”示例中的裤子构建工具问题
【发布时间】:2016-04-25 20:32:41
【问题描述】:

我正在使用 Twitter 的 Pants 构建工具进行“Hello World”练习。在克隆了“pants” repo - 源之后,我成功地在本地配置了裤子。

首先,我在 repo 中创建了一个嵌套目录:

$ mkdir -p mark/python/project_test

然后,我在该目录中创建了两个文件来指定我的应用和 BUILD 为:

$ touch mark/python/project_test/Hello_world.py
$ touch mark/python/project_test/BUILD

Hello_World.py:

print "Hello World!"

构建:

python_binary(name="myapp",
          source="Hello_world.py"
         )

当我使用 ./pants 运行它时,它运行完美:

$ ./pants run mark/python/project_test:myapp
$ Hello World!

然后,我试图通过将“Hello_world.py”更改为:

import utility
print "Hello World!", utility.user(), "!"

我还在与以下目录相同的目录中创建了 utility.py:

import os 

def user():
return os.environ['USER']

当我向原始应用程序添加依赖项时,我还将 BUILD 修改为:

python_library(name="app-lib",
          source=globs("*py")
          )
python_binary(name="myapp",
          source="hello_world.py",
          dependencies=[pants(':app-lib')]
         )

但是,当我使用相同的命令调用 ./pants 时,它返回错误:

$ ./pants run mark/python/project_test:myapp
Exception caught: (<class 'pants.base.cmd_line_spec_parser.BadSpecError'>)

Exception message: name 'pants' is not defined
while executing BUILD file BuildFile(mark/python/project_test/BUILD,       
FileSystemProjectTree(/Users/mli/workspace/source))
Loading addresses from 'mark/python/project_test' failed.
when translating spec mark/python/project_test:myapp

我的目录中目前有三个文件:

$ ls mark/python/project_test
$ BUILD Hello_world.py utility.py

为什么我的应用无法从 utility.py 加载库,以及排列文件夹树和 BUILD 文件的正确方法是什么?

  • 我对构建工具有点陌生,如果有人能在回答问题时提供一些使用裤子的背景信息,我将不胜感激。谢谢!!:)

【问题讨论】:

    标签: python deployment build build-process pants


    【解决方案1】:

    我能够通过一些小的调整使您的项目运行。您的问题是:

    1. 曾经有一个用于裤子快捷方式的pants() 包装器,但它不再存在。我认为您的语法略有错误,即使确实如此。
    2. sourcesources 实际上不同时,您可以互换使用它们。

    对于数字 2,这可能是一个微妙的区别:

    • python_binary 有一个 source - 创建的二进制文件的入口点。
    • python_library 具有 sources - 任意数量的要导入其他项目的文件。

    如果您更改您的BUILD 文件以匹配下面的定义,您应该可以成功重新运行您的调用。祝你好运!

      python_library(
        name='app-lib',
        sources=globs('*.py'),
      )
    
      python_binary(
        name="myapp",
        source="hello_world.py",
        dependencies=[':app-lib']
      )
    

    【讨论】:

    • 非常感谢@mateor!我懂了。当有更新版本时,我可能会使用旧的 BUILD 语法。它完美地工作!再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 2013-12-03
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多