我正在使用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!"
BUILD:
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文件的正确方法是什么?
答案 0 :(得分:2)
我能够通过一些小的调整来运行您的项目。你的问题是:
pants()
包装,但它不再存在。我认为你的语法略有错误,即使它确实存在。source
和sources
实际上是不同的时,您可以互换使用。对于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']
)