Col*_*ost 5 python google-cloud-dataflow apache-beam
我们在 Dataflow 作业部署期间遇到了问题。
我们正在使用 CustomCommands 在 worker 上安装私有 repo,但现在worker-startup
我们的作业日志中出现错误:
Running command: ['pip', 'install', 'git+ssh://git@github.com/my_private_repo.git@v1.0.0']
Command output: b'Traceback (most recent call last):
File "/usr/local/bin/pip", line 6, in <module>
from pip._internal import main\nModuleNotFoundError: No module named \'pip\'\n'
Run Code Online (Sandbox Code Playgroud)
这段代码是有效的,但自从我们上次在周五部署该服务以来,它就没有了。
setup.py
在工作人员启动期间运行的自定义命令。(来自官方仓库的代码示例在这里)pip install git+ssh://git@github.com/my_private_repo.git@v1.0.0
(请参阅下面的命令)Running command: ['pip', 'install', 'git+ssh://git@github.com/my_private_repo.git@v1.0.0']
Command output: b'Traceback (most recent call last):
File "/usr/local/bin/pip", line 6, in <module>
from pip._internal import main\nModuleNotFoundError: No module named \'pip\'\n'
Run Code Online (Sandbox Code Playgroud)
apt-get --reinstall install -y python-setuptools python-wheel python-pip
(和其他变体,如curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python3 get-pip.py --force-reinstall
)重新安装它,但没有具体改进。CUSTOM_COMMANDS = [
# retrieve ssh key
["gsutil", "cp","gs://{bucket_name}/encrypted_python_repo_ssh_key".format(bucket_name=credentials_bucket), "encrypted_key"],
[
"gcloud",
"kms",
"decrypt",
"--location",
"global",
"--keyring",
project,
"--key",
project,
"--plaintext-file",
"decrypted_key",
"--ciphertext-file",
"encrypted_key",
],
["chmod", "700", "decrypted_key"],
# install git & ssh
["apt-get", "update"],
["apt-get", "install", "-y", "openssh-server"],
["apt-get", "install", "-y", "git"],
# Add ssh config which specify the location of the key & the host
[
"gsutil",
"cp",
"gs://{bucket_name}/ssh_config_gcloud".format(bucket_name=credentials_bucket),
"~/.ssh/config",
],
[
"pip",
"install",
"git+ssh://git@github.com/my_private_repo.git@v1.0.0",
],
]
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何想法,或任何可用的解决方法?
谢谢你的帮助 !
这似乎主要是由于机器或我们的计算机的本地状态。
运行诸如python setup.py install
或 之类的一些命令后python setup.py build
,我现在无法再部署作业(worker-startup
在服务部署期间面临相同的错误),但我的同事仍然能够部署作业(相同的代码、相同的分支,除了 . gitignore like build
, dist
, ...) 正在运行。在他的情况下,CustomCommands 不在作业部署上运行(但工作人员仍然能够使用本地打包管道)。
有什么方法可以指定工作人员使用的编译包?我找不到关于那个的文档......
由于我们无法从数据流工作线程中提取私有代码,我们使用了以下解决方法:
python setup.py sdist bdist_wheel
lib/my-package-1.0.0-py3-none-any.whl
pipeline_options = PipelineOptions()
pipeline_options.view_as(SetupOptions).setup_file = "./setup.py"
pipeline_options.view_as(SetupOptions).extra_packages = ["./lib/my-package-1.0.0-py3-none-any.whl"]
Run Code Online (Sandbox Code Playgroud)