关注the documentation后,我将my_op.cc
和my_op.cu.cc
置于tensorflow/core/user_ops
下,并创建了包含
tensorflow/core/user_ops/BUILD
load("//tensorflow:tensorflow.bzl", "tf_custom_op_library")
tf_custom_op_library(
name = "my_op.so",
srcs = ["my_op.cc"],
gpu_srcs = ["my_op.cu.cc"],
)
然后我在tensorflow的根目录下运行以下命令:
bazel build -c opt //tensorflow/core/user_ops:all
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
在构建和安装点子轮之后,我想在项目 my_op
中使用my_project
。
我想我应该创建类似my_project/tf_op/__init__.py
和my_project/tf_op/my_op.py
的内容,它会调用tf.load_op_library
the example cuda_op.py。但是,my_op.so
未包含在已安装的点胶轮中。如何为my_op.so
生成输入(tf.load_op_library
的路径?)
有没有更好的方法来组织my_op.cc
,my_op.cu.cc
,my_op.py
与 my_project
?
答案 0 :(得分:1)
您可以保留项目的目录结构,并创建setup.py,使其也包含.so文件。您也可以用相同的方法添加项目中的其他非python文件。
目录结构示例:
my_package
my_project
__init__.py
setup.py
您可以使用以下命令在my_package目录中安装“ my_project”软件包:
pip install . --user
(如果安装具有root访问权限的软件包,请避免--user参数)
from setuptools import setup, find_packages
setup(name='my_project',
version='1.0',
description='Project Details',
packages=find_packages(),
include_package_data=True,
package_data = {
'': ['*.so', '*.txt', '*.csv'],
},
zip_safe=False)
请不要忘记在包含要导入的python模块的所有文件夹中添加__init__.py
。
参考:https://docs.python.org/2/distutils/setupscript.html#installing-package-data