python中的'./path'和'path'之间的区别

时间:2018-09-25 22:15:51

标签: python tensorflow

通常它们对我来说都可以,而且我很少遇到它们不同的情况。

今天,当我尝试加载自定义的定义模块时:

>>> import tensorflow as tf
>>> encoding = tf.load_op_library('./ops/encoding.so')
>>> dir(encoding)
['LIB_HANDLE', 'OP_LIST', '_AggregateGradOutput', '_InitOpDefLibrary', '_ScaleL2GradOutput', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '_aggregate_grad_outputs', '_collections', '_common_shapes', '_context', '_core', '_dtypes', '_errors', '_execute', '_op_def_lib', '_op_def_library', '_op_def_pb2', '_op_def_registry', '_ops', '_pywrap_tensorflow', '_scale_l2_grad_outputs', '_six', '_tensor_shape', 'aggregate', 'aggregate_eager_fallback', 'aggregate_grad', 'aggregate_grad_eager_fallback', 'scale_l2', 'scale_l2_eager_fallback', 'scale_l2_grad', 'scale_l2_grad_eager_fallback', 'tf_export']

他们给出不同的结果。

>>> encoding = tf.load_op_library('ops/encoding.so')
>>> dir(encoding)
['LIB_HANDLE', 'OP_LIST', '_InitOpDefLibrary', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '_collections', '_common_shapes', '_context', '_core', '_dtypes', '_errors', '_execute', '_op_def_lib', '_op_def_library', '_op_def_pb2', '_op_def_registry', '_ops', '_pywrap_tensorflow', '_six', '_tensor_shape', 'tf_export']

tf.load_op_library

Args:

    library_filename: Path to the plugin. Relative or absolute filesystem path to a dynamic library file.

Returns:

    A python module containing the Python wrappers for Ops defined in the plugin.

由于很难使用关键字./python来搜索相关问题,所以我想知道您是否可以给我一些建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

tf.load_op_library calls the C function TF_LoadLibrary。根据{{​​3}}:

  

加载由library_filename指定的库,并注册该库中存在的操作和内核。

     

将“ library_filename”传递给特定于平台的机制,以动态加载库。确定库的确切位置的规则是特定于平台的,此处未记录。

     

成功后,将OK置于状态并返回新创建的库句柄。调用者拥有库句柄。

     

失败时,将错误状态置于状态并返回NULL。

我认为您平台的“用于动态加载库的特定于平台的机制”可能不会检查当前目录,因此您必须在文件名前面指定./才能显式使用当前目录。