我正在从源代码构建用于NixOS的Tensorflow,面临以下问题:
Traceback (most recent call last):
File "/home/grwlf/tmp/out/execroot/org_tensorflow/bazel-out/host/bin/tensorflow/tools/api/generator/create_python_api.runfiles/org_tensorflow/tensorflow/tools/api/generator/create_python_api.py", line 26, in <module>
from tensorflow.python.util import tf_decorator
File "/home/grwlf/tmp/out/execroot/org_tensorflow/bazel-out/host/bin/tensorflow/tools/api/generator/create_python_api.runfiles/org_tensorflow/tensorflow/python/__init__.py", line 47, in <module>
import numpy as np
ModuleNotFoundError: No module named 'numpy'
此错误是由于执行以下bazel操作导致的:
(cd /home/grwlf/tmp/out/execroot/org_tensorflow && \
exec env - \
LD_LIBRARY_PATH=/run/opengl-driver/lib:/run/opengl-driver-32/lib \
PATH=... \
PYTHON_BIN_PATH=/nix/store/zrbzl421n5lsm84b6drwn08i10wwjbvj-python3-3.6.5-env/bin/python \
PYTHON_LIB_PATH=/nix/store/zrbzl421n5lsm84b6drwn08i10wwjbvj-python3-3.6.5-env/lib/python3.6/site-packages \
TF_DOWNLOAD_CLANG=0 \
TF_NEED_CUDA=0 \
TF_NEED_OPENCL_SYCL=0 \
/nix/store/f2vw9r78fhaq15rcyvllzz2ayafd5n0z-bash/bin/bash -c '
source external/bazel_tools/tools/genrule/genrule-setup.sh;
bazel-out/host/bin/tensorflow/tools/api/generator/create_python_api
bazel-out/k8-py3-opt/genfiles/tensorflow/tools/api/generator/api/__init__.py
< lots of TF python files here >'
(注意,PYTHON_BIN_PATH / PYTHON_LIB_PATH变量包含安装了numpy软件包的python 3.6环境的路径)
目前,我还不清楚numpy的预期来源。 TF应该已经拥有自己的numpy版本,还是必须提供它的构建环境?如果是这样,应该由bazel进行环境清理吗?
答案 0 :(得分:0)
启动/nix/store/zrbzl421n5lsm84b6drwn08i10wwjbvj-python3-3.6.5-env/bin/python时,应检查一下 没有参数,您可以使用import numpy:
Python 3.6.6 (default, Jun 27 2018, 05:47:41)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
通常,您会nix-shell
来获得适当的构建环境
$ nix-shell -p python3Packages.numpy
these paths will be fetched (3.15 MiB download, 19.35 MiB unpacked):
/nix/store/kv39m0n4sg8xar0kg1q4nnskgdr5jvl7-python2.7-numpy-1.14.5
copying path '/nix/store/kv39m0n4sg8xar0kg1q4nnskgdr5jvl7-python2.7-numpy-1.14.5' from 'https://cache.nixos.org'...
$ echo $PYTHONPATH | grep numpy
/nix/store/kv39m0n4sg8xar0kg1q4nnskgdr5jvl7-python2.7-numpy-1.14.5/lib/python2.7/site-packages:/nix/store/7sbvn0wgv7hsnxpss1jba723kx5nz6d4-python-2.7.15/lib/python2.7/site-packages:/nix/store/dlc0139ilc4md16hckh2vg9170dhp6li-python2.7-setuptools-40.0.0/lib/python2.7/site-packages:/nix/store/kv39m0n4sg8xar0kg1q4nnskgdr5jvl7-python2.7-numpy-1.14.5/lib/python2.7/site-packages:/nix/store/7sbvn0wgv7hsnxpss1jba723kx5nz6d4-python-2.7.15/lib/python2.7/site-packages:/nix/store/dlc0139ilc4md16hckh2vg9170dhp6li-python2.7-setuptools-40.0.0/lib/python2.7/site-packages
您还可以创建default.nix
或shell.nix
作为nix-shell的源代码,以保持这一点。我为我的所有项目都这样做:
https://github.com/Mic92/dotfiles/tree/master/nixos/environments
也可以导入nixpkgs用于构建张量流的构建环境:nix-shell '<nixpkgs>' -A python3Packages.tensorflow
。
在nixpkgs中,我们使用setup.py
而不是bazel来构建张量流。
答案 1 :(得分:0)
构建TensorFlow的pre-requisite是使用pip安装numpy,wheel和keras_preprocessing。 TensorFlow取决于您的环境是否具有这些。
pip install -U --user pip numpy wheel
pip install -U --user keras_preprocessing --no-deps