"Hello World" 示例中裤子构建工具的问题
Issue with pants build tool on a "Hello World" example
我正在使用 Twitter 的 Pants 构建工具进行 "Hello World" 练习。克隆 "pants" repo - source 后,我在本地成功配置了裤子。
首先,我在 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 加载库,ar运行ge 文件夹树和 BUILD 文件的正确方法是什么?
- 我是构建工具的新手,如果有人能在回答问题时提供一些使用裤子的背景信息,我将不胜感激。谢谢!!:)
我可以通过一些小的调整来完成您的项目 运行。您的问题是:
- 曾经有一个
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']
)
我正在使用 Twitter 的 Pants 构建工具进行 "Hello World" 练习。克隆 "pants" repo - source 后,我在本地成功配置了裤子。
首先,我在 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 加载库,ar运行ge 文件夹树和 BUILD 文件的正确方法是什么?
- 我是构建工具的新手,如果有人能在回答问题时提供一些使用裤子的背景信息,我将不胜感激。谢谢!!:)
我可以通过一些小的调整来完成您的项目 运行。您的问题是:
- 曾经有一个
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']
)