Desarrollo
El documento contiene la información necesaria para configurar el entorno de desarrollo y construir el paquete tensorflow-io
desde el código fuente en varias plataformas. Una vez que complete la configuración, consulte STYLE_GUIDE para obtener las pautas sobre cómo agregar nuevas operaciones.
Configurar el entorno de desarrollo integrado
Para obtener instrucciones sobre cómo configurar Visual Studio Code para desarrollar TensorFlow I/O, consulte este documento.
Lint
El código de TensorFlow I/O se ajusta a Bazel Buildifier, Clang Format, Black y Pyupgrade. Use el siguiente comando para verificar el código fuente e identificar problemas de lint:
Para Bazel Buildifier y Clang Format, el siguiente comando identificará y corregirá automáticamente cualquier error de lint:
De forma alternativa, si solo desea realizar una verificación de lint con linters individuales, puede pasar selectivamente black
, pyupgrade
, bazel
o clang
en los comandos anteriores.
Por ejemplo, se puede realizar una verificación de lint específica black
con:
La corrección de lint con Bazel Buildifier y Clang Format se puede realizar con:
La verificación de lint con black
y pyupgrade
para un archivo de Python individual se puede realizar con:
La corrección de lint de un archivo python individual con black y pyupgrade con:
Python
macOS
En macOS Catalina 10.15.7, es posible compilar tensorflow-io con Python 3.8.2 que viene con el sistema. Se necesitan tanto tensorflow
como bazel
para hacerlo.
NOTA: El Python 3.8.2 predeterminado del sistema en macOS 10.15.7 provocará un error de instalación regex
que ocurre por la opción del compilador -arch arm64 -arch x86_64
(similar al problema mencionado en https://github.com/giampaolo/psutil/issues/1832). Para solucionar este problema, necesitamos export ARCHFLAGS="-arch x86_64"
para eliminar la opción de compilación arm64.
NOTA: Al ejecutar pytest, se debe pasar TFIO_DATAPATH=bazel-bin
para que Python pueda usar las bibliotecas compartidas generadas después del proceso de compilación.
Solución de problemas
Si Xcode está instalado, pero $ xcodebuild -version
no muestra el resultado esperado, es posible que deba habilitar la línea de comando de Xcode con el comando:
$ xcode-select -s /Applications/Xcode.app/Contents/Developer
.
Es posible que sea necesario reiniciar la terminal para que los cambios surtan efecto.
Salida de muestra:
Linux
El desarrollo de tensorflow-io en Linux es similar a macOS. Los paquetes requeridos son gcc, g++, git, bazel y python 3. Sin embargo, es posible que se requieran versiones más nuevas de gcc o python, distintas a las instaladas por defecto en el sistema.
Ubuntu 20.04
Ubuntu 20.04 requiere gcc/g++, git y python 3. En la siguiente celda se instalarán dependencias y se crearán las bibliotecas compartidas en Ubuntu 20.04:
CentOS 8
Los pasos para crear bibliotecas compartidas para CentOS 8 son similares a los de Ubuntu 20.04 mencionados anteriormente, excepto que
debería usarse en su lugar para instalar gcc/g++, git, unzip/what (para bazel) y python3.
CentOS 7
En CentOS 7, las versiones predeterminadas de python y gcc son demasiado antiguas para crear las bibliotecas compartidas de tensorflow-io (.so). En su lugar, se debe usar el gcc proporcionado por Developer Toolset y rh-python36. Además, libstdc++ debe vincularse estáticamente para evitar discrepancias entre libstdc++ instalado en CentOS y la versión más reciente de gcc de devtoolset.
Además, se debe pasar un indicador especial --//tensorflow_io/core:static_build
a Bazel para evitar la duplicación de símbolos en bibliotecas vinculadas estáticamente para complementos del sistema de archivos.
En la celda siguinte se instalará bazel, devtoolset-9, rh-python36 y se crearán las bibliotecas compartidas:
Docker
Para el desarrollo de Python, se puede usar un Dockerfile de referencia, aquí, para crear el paquete de I/O de TensorFlow (tensorflow-io
) desde el código fuente. Además, también se pueden usar las imágenes de desarrollo prediseñadas:
Se generará un archivo de paquete dist/tensorflow_io-*.whl
después de que la compilación sea exitosa.
NOTA: Cuando se trabaja en el contenedor de desarrollo de Python, una variable de entorno TFIO_DATAPATH
se configura automáticamente para apuntar tensorflow-io a las bibliotecas C++ compartidas creadas por Bazel para ejecutar pytest
y compilar bdist_wheel
. Python setup.py
también puede aceptar --data [path]
como argumento, por ejemplo python setup.py --data bazel-bin bdist_wheel
.
NOTA: Si bien el contenedor tfio-dev ofrece a los desarrolladores un entorno fácil de trabajar, los paquetes whl publicados se crean de manera diferente debido a muchos requisitos de Linux2010. Consulte la sección [Estado de compilación y CI] para obtener más detalles sobre cómo se generan los paquetes whl publicados.
Ruedas de Python
Es posible generar ruedas de Python después de completar la generación de Bazel con el siguiente comando:
El archivo .whl estará disponible en el directorio dist. Tenga en cuenta que el directorio binario de bazel, bazel-bin
debe pasarse con --data
args para que setup.py ubique los objetos compartidos necesarios, ya que bazel-bin
está fuera del directorio del paquete tensorflow_io
.
Alternativamente, la instalación del código fuente se puede realizar con:
con TFIO_DATAPATH=bazel-bin
pasado por el mismo motivo.
Tenga en cuenta que la instalación con -e
es diferente a la anterior. El
no instalará el objeto compartido automáticamente incluso con TFIO_DATAPATH=bazel-bin
. En su lugar, se debe pasar TFIO_DATAPATH=bazel-bin
cada vez que se ejecuta el programa después de la instalación:
Prueba
Algunas pruebas requieren iniciar un contenedor de prueba o iniciar una instancia local de la herramienta asociada antes de ejecutarse. Por ejemplo, para ejecutar pruebas relacionadas con Kafka que iniciarán una instancia local de Kafka, zookeeper y esquema-registro, use:
Las pruebas de Datasets
asociadas con herramientas como Elasticsearch
o MongoDB
requieren que Docker esté disponible en el sistema. En tales escenarios, use:
Además, probar algunas características de tensorflow-io
no requiere que active ninguna herramienta adicional, ya que los datos se proporcionan en el directorio tests
. Por ejemplo, para ejecutar pruebas relacionadas con conjuntos de datos parquet
, use:
R
Aquí le proporcionamos un Dockerfile de referencia para que pueda usar el paquete R directamente para realizar pruebas. Puede generarlo a través de:
Dentro del contenedor, puede iniciar su sesión de R, crear una instancia de un SequenceFileDataset
a partir de un ejemplo Hadoop SequenceFile string.seq y luego usar cualquier función de transformación proporcionada por el paquete tfdatasets en el conjunto de datos como se muestra a continuación: