如何在pip轮中包含.so自定义操作并组织自定义操作的来源?

时间:2017-02-10 12:33:31

标签: tensorflow

关注the documentation后,我将my_op.ccmy_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__.pymy_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.ccmy_op.cu.ccmy_op.py my_project

1 个答案:

答案 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