icupy


Nameicupy JSON
Version 0.19.0 PyPI version JSON
download
home_pagehttps://github.com/miute/icupy
SummaryPython bindings for ICU4C
upload_time2024-05-02 14:14:36
maintainerNone
docs_urlNone
authorTetsuya Miura
requires_python>=3.8
licenseMIT
keywords icu4c unicode binding
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # icupy

[![PyPI](https://img.shields.io/pypi/v/icupy)](https://pypi.org/project/icupy/)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/icupy)](https://pypi.org/project/icupy/)
[![icu](https://img.shields.io/badge/icu-70.1%20%7C%2071.1%20%7C%2072.1%20%7C%2073.2%20%7C%2074.2%20%7C%2075.1-red)](https://icu.unicode.org/)
[![PyPI - License](https://img.shields.io/pypi/l/icupy)](https://pypi.org/project/icupy/)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/miute/icupy/main.svg)](https://results.pre-commit.ci/latest/github/miute/icupy/main)
[![tests](https://github.com/miute/icupy/actions/workflows/tests.yml/badge.svg)](https://github.com/miute/icupy/actions/workflows/tests.yml)
[![build wheels](https://github.com/miute/icupy/actions/workflows/build.yml/badge.svg)](https://github.com/miute/icupy/actions/workflows/build.yml)
[![codecov](https://codecov.io/gh/miute/icupy/branch/main/graph/badge.svg?token=QCW3K19ARA)](https://codecov.io/gh/miute/icupy)

Python bindings for [ICU4C](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/index.html) using [pybind11](https://github.com/pybind/pybind11).

## Changes from ICU4C

- **Naming Conventions**

  Renamed functions, methods, and C++ enumerators to conform to [PEP 8](https://peps.python.org/pep-0008/#naming-conventions).

  - Function Names:
    Use `lower_case_with_underscores` style.
  - Method Names:
    Use `lower_case_with_underscores` style.
    Also, use one leading underscore only for protected methods.
  - C++ Enumerators: Use `UPPER_CASE_WITH_UNDERSCORES` style without a leading "k". (e.g., `kDateOffset` → `DATE_OFFSET`)
  - APIs that match Python reserved words: e.g.,
    - `with()` → `with_()`

- **Error Handling**
  - Unlike the C/C++ APIs, `icupy` raises the `icupy.icu.ICUError` exception if an error code indicates a failure instead of receiving an error code `UErrorCode`.

    You can access the [icu::ErrorCode](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1ErrorCode.html) object from `ICUError.args[0]`.
    For example:

    ```python
    from icupy import icu
    try:
        ...
    except icu.ICUError as e:
        print(e.args[0])  # → icupy.icu.ErrorCode
        print(e.args[0].get())  # → icupy.icu.UErrorCode
    ```

## Examples

- [icu::UnicodeString](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1UnicodeString.html) with
  [error callback](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/ucnv__err_8h.html)

  ```python
  from icupy import icu
  cnv = icu.ucnv_open('utf-8')
  action = icu.UCNV_TO_U_CALLBACK_ESCAPE
  context = icu.ConstVoidPtr(icu.UCNV_ESCAPE_C)
  icu.ucnv_set_to_ucall_back(cnv, action, context)
  utf8 = b'\x61\xfe\x62'  # Impossible bytes
  s = icu.UnicodeString(utf8, -1, cnv)
  str(s)  # → 'a\\xFEb'

  action = icu.UCNV_TO_U_CALLBACK_ESCAPE
  context = icu.ConstVoidPtr(icu.UCNV_ESCAPE_XML_DEC)
  icu.ucnv_set_to_ucall_back(cnv, action, context)
  s = icu.UnicodeString(utf8, -1, cnv)
  str(s)  # → 'aþb'
  ```

- [icu::UnicodeString](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1UnicodeString.html) with
  [user callback](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/ucnv__cb_8h.html)

  ```python
  from icupy import icu
  def _to_callback(
      _context: object,
      _args: icu.UConverterToUnicodeArgs,
      _code_units: bytes,
      _length: int,
      _reason: icu.UConverterCallbackReason,
      _error_code: icu.UErrorCode,
  ) -> icu.UErrorCode:
      if _reason == icu.UCNV_ILLEGAL:
          _source = ''.join(['%{:02X}'.format(x) for x in _code_units])
          icu.ucnv_cb_to_uwrite_uchars(_args, _source, len(_source), 0)
          _error_code = icu.U_ZERO_ERROR
      return _error_code

  cnv = icu.ucnv_open('utf-8')
  action = icu.UConverterToUCallbackPtr(_to_callback)
  context = icu.ConstVoidPtr(None)
  icu.ucnv_set_to_ucall_back(cnv, action, context)
  utf8 = b'\x61\xfe\x62'  # Impossible bytes
  s = icu.UnicodeString(utf8, -1, cnv)
  str(s)  # → 'a%FEb'
  ```

- [icu::DateFormat](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1DateFormat.html)

  ```python
  from icupy import icu
  tz = icu.TimeZone.create_time_zone('America/Los_Angeles')
  fmt = icu.DateFormat.create_instance_for_skeleton('yMMMMd', icu.Locale.get_english())
  fmt.set_time_zone(tz)
  dest = icu.UnicodeString()
  s = fmt.format(0, dest)
  str(s)  # → 'December 31, 1969'
  ```

- [icu::MessageFormat](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1MessageFormat.html)

  ```python
  from icupy import icu
  fmt = icu.MessageFormat(
      "At {1,time,::jmm} on {1,date,::dMMMM}, "
      "there was {2} on planet {0,number}.",
      icu.Locale.get_us(),
  )
  tz = icu.TimeZone.get_gmt()
  subfmts = fmt.get_formats()
  subfmts[0].set_time_zone(tz)
  subfmts[1].set_time_zone(tz)
  date = 1637685775000.0  # 2021-11-23T16:42:55Z
  obj = icu.Formattable(
      [
          icu.Formattable(7),
          icu.Formattable(date, icu.Formattable.IS_DATE),
          icu.Formattable(icu.UnicodeString('a disturbance in the Force')),
      ]
  )
  dest = icu.UnicodeString()
  s = fmt.format(obj, dest)
  str(s)  # → 'At 4:42 PM on November 23, there was a disturbance in the Force on planet 7.'
  ```

- [icu::number::NumberFormatter](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1number_1_1NumberFormatter.html)

  ```python
  from icupy import icu
  fmt = icu.number.NumberFormatter.with_().unit(icu.MeasureUnit.get_meter()).per_unit(icu.MeasureUnit.get_second())
  print(fmt.locale(icu.Locale.get_us()).format_double(3000).to_string())  # → '3,000 m/s'
  print(fmt.locale(icu.Locale.get_france()).format_double(3000).to_string())  # → '3 000 m/s'
  print(fmt.locale('ar').format_double(3000).to_string())  # → '٣٬٠٠٠ م/ث'
  ```

- [icu::BreakIterator](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1BreakIterator.html)

  ```python
  from icupy import icu
  text = icu.UnicodeString('In the meantime Mr. Weston arrived with his small ship.')
  bi = icu.BreakIterator.create_sentence_instance(icu.Locale('en'))
  bi.set_text(text)
  list(bi)  # → [20, 55]
  # filter based on common English language abbreviations
  bi = icu.BreakIterator.create_sentence_instance(icu.Locale('en@ss=standard'))
  bi.set_text(text)
  list(bi)  # → [55]
  ```

- [icu::IDNA](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1IDNA.html) (UTS #46)

  ```python
  from icupy import icu
  uts46 = icu.IDNA.create_uts46_instance(icu.UIDNA_NONTRANSITIONAL_TO_ASCII)
  dest = icu.UnicodeString()
  info = icu.IDNAInfo()
  uts46.name_to_ascii(icu.UnicodeString('faß.ExAmPlE'), dest, info)
  info.get_errors()  # → 0
  str(dest)  # → 'xn--fa-hia.example'
  ```

- For more examples, see [tests](https://github.com/miute/icupy/tree/main/tests).

## Installation

### Prerequisites

- [Python](https://www.python.org/) >=3.8
- [ICU4C](https://github.com/unicode-org/icu/releases) [(ICU - The International Components for Unicode)](https://icu.unicode.org/) (>=70 recommended)
- C++17 compatible compiler (see [supported compilers](https://github.com/pybind/pybind11#supported-compilers))
- [CMake](https://cmake.org/) >=3.7

### Installing prerequisites

- Windows

  Install the following dependencies.

  - [Python](https://www.python.org/downloads/) >=3.8
  - [Pre-built ICU4C binary package](https://github.com/unicode-org/icu/releases) (>=70 recommended)
  - Visual Studio 2015 Update 3 or newer. Visual Studio 2019 or newer recommended
  - [CMake](https://cmake.org/download/) >=3.7
    - *Note: Add CMake to the system PATH.*

- Linux

  To install dependencies, run the following command:

  - Ubuntu/Debian:

    ```bash
    sudo apt install g++ cmake libicu-dev python3-dev python3-pip
    ```

  - Fedora:

    ```bash
    sudo dnf install gcc-c++ cmake icu libicu-devel python3-devel
    ```

  If your system's ICU is out of date, consider
  [building ICU4C from source](https://unicode-org.github.io/icu/userguide/icu4c/build.html) or installing [pre-built
  ICU4C binary package](https://github.com/unicode-org/icu/releases).

### Building icupy from source

1. Configuring environment variables:

   - Windows:

     - Set the `ICU_ROOT` environment variable to the root of the ICU installation (default is `C:\icu`).
       For example, if the ICU is located in `C:\icu4c`:

       ```bat
       set ICU_ROOT=C:\icu4c
       ```

       or in PowerShell:

       ```powershell
       $env:ICU_ROOT = "C:\icu4c"
       ```

     - To verify settings using `icuinfo` (64-bit):

       ```bat
       %ICU_ROOT%\bin64\icuinfo
       ```

       or in PowerShell:

       ```powershell
       & $env:ICU_ROOT\bin64\icuinfo
       ```

   - Linux:

     - If the ICU is located in a non-regular place, set the `PKG_CONFIG_PATH` and `LD_LIBRARY_PATH` environment variables.
       For example, if the ICU is located in `/usr/local`:

       ```bash
       export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
       export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
       ```

     - To verify settings using `pkg-config`:

       ```bash
       $ pkg-config --cflags --libs icu-uc
       -I/usr/local/include -L/usr/local/lib -licuuc -licudata
       ```

2. Installing from PyPI:

   ```bash
   pip install icupy
   ```

   Optionally, CMake environment variables are available.
   For example, using the Ninja build system and Clang:

   ```bash
   CMAKE_GENERATOR=Ninja CXX=clang++ pip install icupy
   ```

   Alternatively, installing development version from the git repository:

   ```bash
   pip install git+https://github.com/miute/icupy.git
   ```

## Usage

1. Configuring environment variables:

   - Windows:

     - Set the `ICU_ROOT` environment variable to the root of the ICU installation (default is `C:\icu`).
       For example, if the ICU is located in `C:\icu4c`:

       ```bat
       set ICU_ROOT=C:\icu4c
       ```

       or in PowerShell:

       ```powershell
       $env:ICU_ROOT = "C:\icu4c"
       ```

   - Linux:

     - If the ICU is located in a non-regular place, set the `LD_LIBRARY_PATH` environment variables.
       For example, if the ICU is located in `/usr/local`:

       ```bash
       export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
       ```

2. Using `icupy`:

   ```python
   import icupy.icu as icu
   # or
   from icupy import icu
   ```

## License

This project is licensed under the [MIT License](https://github.com/miute/icupy/blob/main/LICENSE).

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/miute/icupy",
    "name": "icupy",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "icu4c, unicode, binding",
    "author": "Tetsuya Miura",
    "author_email": "miute.dev@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/ec/19/d0a0bb9a56bfc3e046c7c4662769e0e931db860c3a264693fc6cb9786bd9/icupy-0.19.0.tar.gz",
    "platform": null,
    "description": "# icupy\n\n[![PyPI](https://img.shields.io/pypi/v/icupy)](https://pypi.org/project/icupy/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/icupy)](https://pypi.org/project/icupy/)\n[![icu](https://img.shields.io/badge/icu-70.1%20%7C%2071.1%20%7C%2072.1%20%7C%2073.2%20%7C%2074.2%20%7C%2075.1-red)](https://icu.unicode.org/)\n[![PyPI - License](https://img.shields.io/pypi/l/icupy)](https://pypi.org/project/icupy/)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/miute/icupy/main.svg)](https://results.pre-commit.ci/latest/github/miute/icupy/main)\n[![tests](https://github.com/miute/icupy/actions/workflows/tests.yml/badge.svg)](https://github.com/miute/icupy/actions/workflows/tests.yml)\n[![build wheels](https://github.com/miute/icupy/actions/workflows/build.yml/badge.svg)](https://github.com/miute/icupy/actions/workflows/build.yml)\n[![codecov](https://codecov.io/gh/miute/icupy/branch/main/graph/badge.svg?token=QCW3K19ARA)](https://codecov.io/gh/miute/icupy)\n\nPython bindings for [ICU4C](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/index.html) using [pybind11](https://github.com/pybind/pybind11).\n\n## Changes from ICU4C\n\n- **Naming Conventions**\n\n  Renamed functions, methods, and C++ enumerators to conform to [PEP 8](https://peps.python.org/pep-0008/#naming-conventions).\n\n  - Function Names:\n    Use `lower_case_with_underscores` style.\n  - Method Names:\n    Use `lower_case_with_underscores` style.\n    Also, use one leading underscore only for protected methods.\n  - C++ Enumerators: Use `UPPER_CASE_WITH_UNDERSCORES` style without a leading \"k\". (e.g., `kDateOffset` \u2192 `DATE_OFFSET`)\n  - APIs that match Python reserved words: e.g.,\n    - `with()` \u2192 `with_()`\n\n- **Error Handling**\n  - Unlike the C/C++ APIs, `icupy` raises the `icupy.icu.ICUError` exception if an error code indicates a failure instead of receiving an error code `UErrorCode`.\n\n    You can access the [icu::ErrorCode](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1ErrorCode.html) object from `ICUError.args[0]`.\n    For example:\n\n    ```python\n    from icupy import icu\n    try:\n        ...\n    except icu.ICUError as e:\n        print(e.args[0])  # \u2192 icupy.icu.ErrorCode\n        print(e.args[0].get())  # \u2192 icupy.icu.UErrorCode\n    ```\n\n## Examples\n\n- [icu::UnicodeString](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1UnicodeString.html) with\n  [error callback](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/ucnv__err_8h.html)\n\n  ```python\n  from icupy import icu\n  cnv = icu.ucnv_open('utf-8')\n  action = icu.UCNV_TO_U_CALLBACK_ESCAPE\n  context = icu.ConstVoidPtr(icu.UCNV_ESCAPE_C)\n  icu.ucnv_set_to_ucall_back(cnv, action, context)\n  utf8 = b'\\x61\\xfe\\x62'  # Impossible bytes\n  s = icu.UnicodeString(utf8, -1, cnv)\n  str(s)  # \u2192 'a\\\\xFEb'\n\n  action = icu.UCNV_TO_U_CALLBACK_ESCAPE\n  context = icu.ConstVoidPtr(icu.UCNV_ESCAPE_XML_DEC)\n  icu.ucnv_set_to_ucall_back(cnv, action, context)\n  s = icu.UnicodeString(utf8, -1, cnv)\n  str(s)  # \u2192 'aþb'\n  ```\n\n- [icu::UnicodeString](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1UnicodeString.html) with\n  [user callback](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/ucnv__cb_8h.html)\n\n  ```python\n  from icupy import icu\n  def _to_callback(\n      _context: object,\n      _args: icu.UConverterToUnicodeArgs,\n      _code_units: bytes,\n      _length: int,\n      _reason: icu.UConverterCallbackReason,\n      _error_code: icu.UErrorCode,\n  ) -> icu.UErrorCode:\n      if _reason == icu.UCNV_ILLEGAL:\n          _source = ''.join(['%{:02X}'.format(x) for x in _code_units])\n          icu.ucnv_cb_to_uwrite_uchars(_args, _source, len(_source), 0)\n          _error_code = icu.U_ZERO_ERROR\n      return _error_code\n\n  cnv = icu.ucnv_open('utf-8')\n  action = icu.UConverterToUCallbackPtr(_to_callback)\n  context = icu.ConstVoidPtr(None)\n  icu.ucnv_set_to_ucall_back(cnv, action, context)\n  utf8 = b'\\x61\\xfe\\x62'  # Impossible bytes\n  s = icu.UnicodeString(utf8, -1, cnv)\n  str(s)  # \u2192 'a%FEb'\n  ```\n\n- [icu::DateFormat](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1DateFormat.html)\n\n  ```python\n  from icupy import icu\n  tz = icu.TimeZone.create_time_zone('America/Los_Angeles')\n  fmt = icu.DateFormat.create_instance_for_skeleton('yMMMMd', icu.Locale.get_english())\n  fmt.set_time_zone(tz)\n  dest = icu.UnicodeString()\n  s = fmt.format(0, dest)\n  str(s)  # \u2192 'December 31, 1969'\n  ```\n\n- [icu::MessageFormat](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1MessageFormat.html)\n\n  ```python\n  from icupy import icu\n  fmt = icu.MessageFormat(\n      \"At {1,time,::jmm} on {1,date,::dMMMM}, \"\n      \"there was {2} on planet {0,number}.\",\n      icu.Locale.get_us(),\n  )\n  tz = icu.TimeZone.get_gmt()\n  subfmts = fmt.get_formats()\n  subfmts[0].set_time_zone(tz)\n  subfmts[1].set_time_zone(tz)\n  date = 1637685775000.0  # 2021-11-23T16:42:55Z\n  obj = icu.Formattable(\n      [\n          icu.Formattable(7),\n          icu.Formattable(date, icu.Formattable.IS_DATE),\n          icu.Formattable(icu.UnicodeString('a disturbance in the Force')),\n      ]\n  )\n  dest = icu.UnicodeString()\n  s = fmt.format(obj, dest)\n  str(s)  # \u2192 'At 4:42 PM on November 23, there was a disturbance in the Force on planet 7.'\n  ```\n\n- [icu::number::NumberFormatter](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1number_1_1NumberFormatter.html)\n\n  ```python\n  from icupy import icu\n  fmt = icu.number.NumberFormatter.with_().unit(icu.MeasureUnit.get_meter()).per_unit(icu.MeasureUnit.get_second())\n  print(fmt.locale(icu.Locale.get_us()).format_double(3000).to_string())  # \u2192 '3,000 m/s'\n  print(fmt.locale(icu.Locale.get_france()).format_double(3000).to_string())  # \u2192 '3\u202f000\u202fm/s'\n  print(fmt.locale('ar').format_double(3000).to_string())  # \u2192 '\u0663\u066c\u0660\u0660\u0660 \u0645/\u062b'\n  ```\n\n- [icu::BreakIterator](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1BreakIterator.html)\n\n  ```python\n  from icupy import icu\n  text = icu.UnicodeString('In the meantime Mr. Weston arrived with his small ship.')\n  bi = icu.BreakIterator.create_sentence_instance(icu.Locale('en'))\n  bi.set_text(text)\n  list(bi)  # \u2192 [20, 55]\n  # filter based on common English language abbreviations\n  bi = icu.BreakIterator.create_sentence_instance(icu.Locale('en@ss=standard'))\n  bi.set_text(text)\n  list(bi)  # \u2192 [55]\n  ```\n\n- [icu::IDNA](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1IDNA.html) (UTS #46)\n\n  ```python\n  from icupy import icu\n  uts46 = icu.IDNA.create_uts46_instance(icu.UIDNA_NONTRANSITIONAL_TO_ASCII)\n  dest = icu.UnicodeString()\n  info = icu.IDNAInfo()\n  uts46.name_to_ascii(icu.UnicodeString('fa\u00df.ExAmPlE'), dest, info)\n  info.get_errors()  # \u2192 0\n  str(dest)  # \u2192 'xn--fa-hia.example'\n  ```\n\n- For more examples, see [tests](https://github.com/miute/icupy/tree/main/tests).\n\n## Installation\n\n### Prerequisites\n\n- [Python](https://www.python.org/) >=3.8\n- [ICU4C](https://github.com/unicode-org/icu/releases) [(ICU - The International Components for Unicode)](https://icu.unicode.org/) (>=70 recommended)\n- C++17 compatible compiler (see [supported compilers](https://github.com/pybind/pybind11#supported-compilers))\n- [CMake](https://cmake.org/) >=3.7\n\n### Installing prerequisites\n\n- Windows\n\n  Install the following dependencies.\n\n  - [Python](https://www.python.org/downloads/) >=3.8\n  - [Pre-built ICU4C binary package](https://github.com/unicode-org/icu/releases) (>=70 recommended)\n  - Visual Studio 2015 Update 3 or newer. Visual Studio 2019 or newer recommended\n  - [CMake](https://cmake.org/download/) >=3.7\n    - *Note: Add CMake to the system PATH.*\n\n- Linux\n\n  To install dependencies, run the following command:\n\n  - Ubuntu/Debian:\n\n    ```bash\n    sudo apt install g++ cmake libicu-dev python3-dev python3-pip\n    ```\n\n  - Fedora:\n\n    ```bash\n    sudo dnf install gcc-c++ cmake icu libicu-devel python3-devel\n    ```\n\n  If your system's ICU is out of date, consider\n  [building ICU4C from source](https://unicode-org.github.io/icu/userguide/icu4c/build.html) or installing [pre-built\n  ICU4C binary package](https://github.com/unicode-org/icu/releases).\n\n### Building icupy from source\n\n1. Configuring environment variables:\n\n   - Windows:\n\n     - Set the `ICU_ROOT` environment variable to the root of the ICU installation (default is `C:\\icu`).\n       For example, if the ICU is located in `C:\\icu4c`:\n\n       ```bat\n       set ICU_ROOT=C:\\icu4c\n       ```\n\n       or in PowerShell:\n\n       ```powershell\n       $env:ICU_ROOT = \"C:\\icu4c\"\n       ```\n\n     - To verify settings using `icuinfo` (64-bit):\n\n       ```bat\n       %ICU_ROOT%\\bin64\\icuinfo\n       ```\n\n       or in PowerShell:\n\n       ```powershell\n       & $env:ICU_ROOT\\bin64\\icuinfo\n       ```\n\n   - Linux:\n\n     - If the ICU is located in a non-regular place, set the `PKG_CONFIG_PATH` and `LD_LIBRARY_PATH` environment variables.\n       For example, if the ICU is located in `/usr/local`:\n\n       ```bash\n       export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH\n       export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH\n       ```\n\n     - To verify settings using `pkg-config`:\n\n       ```bash\n       $ pkg-config --cflags --libs icu-uc\n       -I/usr/local/include -L/usr/local/lib -licuuc -licudata\n       ```\n\n2. Installing from PyPI:\n\n   ```bash\n   pip install icupy\n   ```\n\n   Optionally, CMake environment variables are available.\n   For example, using the Ninja build system and Clang:\n\n   ```bash\n   CMAKE_GENERATOR=Ninja CXX=clang++ pip install icupy\n   ```\n\n   Alternatively, installing development version from the git repository:\n\n   ```bash\n   pip install git+https://github.com/miute/icupy.git\n   ```\n\n## Usage\n\n1. Configuring environment variables:\n\n   - Windows:\n\n     - Set the `ICU_ROOT` environment variable to the root of the ICU installation (default is `C:\\icu`).\n       For example, if the ICU is located in `C:\\icu4c`:\n\n       ```bat\n       set ICU_ROOT=C:\\icu4c\n       ```\n\n       or in PowerShell:\n\n       ```powershell\n       $env:ICU_ROOT = \"C:\\icu4c\"\n       ```\n\n   - Linux:\n\n     - If the ICU is located in a non-regular place, set the `LD_LIBRARY_PATH` environment variables.\n       For example, if the ICU is located in `/usr/local`:\n\n       ```bash\n       export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH\n       ```\n\n2. Using `icupy`:\n\n   ```python\n   import icupy.icu as icu\n   # or\n   from icupy import icu\n   ```\n\n## License\n\nThis project is licensed under the [MIT License](https://github.com/miute/icupy/blob/main/LICENSE).\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python bindings for ICU4C",
    "version": "0.19.0",
    "project_urls": {
        "Changelog": "https://github.com/miute/icupy/blob/main/CHANGELOG.md",
        "Download": "https://github.com/miute/icupy/releases",
        "Homepage": "https://github.com/miute/icupy"
    },
    "split_keywords": [
        "icu4c",
        " unicode",
        " binding"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ec19d0a0bb9a56bfc3e046c7c4662769e0e931db860c3a264693fc6cb9786bd9",
                "md5": "47d2e608c8ca6eca687f530f47233ece",
                "sha256": "cee6d71eea68c45151c387a3f65b2edce85ce2232d055429e4bf79bd0a6ed038"
            },
            "downloads": -1,
            "filename": "icupy-0.19.0.tar.gz",
            "has_sig": false,
            "md5_digest": "47d2e608c8ca6eca687f530f47233ece",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 556739,
            "upload_time": "2024-05-02T14:14:36",
            "upload_time_iso_8601": "2024-05-02T14:14:36.251789Z",
            "url": "https://files.pythonhosted.org/packages/ec/19/d0a0bb9a56bfc3e046c7c4662769e0e931db860c3a264693fc6cb9786bd9/icupy-0.19.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-02 14:14:36",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "miute",
    "github_project": "icupy",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "icupy"
}
        
Elapsed time: 0.24614s