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

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

$ 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文件的正确方法是什么?


我是构建工具的新手,如果有人在回答问题时能提供一些使用裤子的信息,我将不胜感激。谢谢!!:)

最佳答案

我能够进行一些小的调整就可以使您的项目运行。您的问题是:


裤子快捷方式曾经有一个pants()包装器,但现在已经不存在了。我认为即使语法确实有些错误,您也可以。
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']
  )

关于python - 关于“Hello World”示例的裤子构建工具的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36850519/

10-11 08:44