Git Product home page Git Product logo

conda-verify's Introduction

Conda Logo

Tests (GitHub Actions) Codecov Status CodSpeed Performance Benchmarks latest release version

Conda is a cross-platform, language-agnostic binary package manager. It is the package manager used by Anaconda installations, but it may be used for other systems as well. Conda makes environments first-class citizens, making it easy to create independent environments even for C libraries. Conda is written entirely in Python, and is BSD licensed open source.

Conda is enhanced by organizations, tools, and repositories created and managed by the amazing members of the conda community. Some of them can be found here.

Installation

Conda is a part of the Anaconda Distribution. Use Miniconda to bootstrap a minimal installation that only includes conda and its dependencies.

Updating conda

To update conda to the newest version, use the following command:

$ conda update -n base conda

Tip

It is possible that conda update does not install the newest version if the existing conda version is far behind the current release. In this case, updating needs to be done in stages.

For example, to update from conda 4.12 to conda 23.10.0, conda 22.11.1 needs to be installed first:

$ conda install -n base conda=22.11.1
$ conda update conda

Getting Started

If you install the Anaconda Distribution, you will already have hundreds of packages installed. You can see what packages are installed by running:

$ conda list

to see all the packages that are available, use:

$ conda search

and to install a package, use

$ conda install <package-name>

The real power of conda comes from its ability to manage environments. In conda, an environment can be thought of as a completely separate installation. Conda installs packages into environments efficiently using hard links by default when it is possible, so environments are space efficient, and take seconds to create.

The default environment, which conda itself is installed into, is called base. To create another environment, use the conda create command. For instance, to create an environment with PyTorch, you would run:

$ conda create --name ml-project pytorch

This creates an environment called ml-project with the latest version of PyTorch, and its dependencies.

We can now activate this environment:

$ conda activate ml-project

This puts the bin directory of the ml-project environment in the front of the PATH, and sets it as the default environment for all subsequent conda commands.

To go back to the base environment, use:

$ conda deactivate

Building Your Own Packages

You can easily build your own packages for conda, and upload them to anaconda.org, a free service for hosting packages for conda, as well as other package managers. To build a package, create a recipe. Package building documentation is available here. See AnacondaRecipes for the recipes that make up the Anaconda Distribution and defaults channel. Conda-forge and Bioconda are community-driven conda-based distributions.

To upload to anaconda.org, create an account. Then, install the anaconda-client and login:

$ conda install anaconda-client
$ anaconda login

Then, after you build your recipe:

$ conda build <recipe-dir>

you will be prompted to upload to anaconda.org.

To add your anaconda.org channel, or other's channels, to conda so that conda install will find and install their packages, run:

$ conda config --add channels https://conda.anaconda.org/username

(replacing username with the username of the person whose channel you want to add).

Getting Help

Contributing

open in gitpod for one-click development

Contributions to conda are welcome. See the contributing documentation for instructions on setting up a development environment.

conda-verify's People

Contributors

conda-bot avatar ilanschnell avatar jakirkham avatar jezdez avatar kalefranz avatar kenodegard avatar mandeep avatar mingwandroid avatar msarahan avatar nehaljwani avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

conda-verify's Issues

CondaPackageCheck fails with AttributeError when building `noarch` package.

A package that builds fine for Windows is failing when I try to build as a "noarch" package.

The traceback I get is here: https://www.heypasteit.com/clip/0ITXRY

The line where this error is occurring is here:

assert self.info.subdir == 'noarch'

Looking through the code i see that other parts of the code reference self.info['subdir'] rather than self.info.subdir. This fixed the attribute error but the assertion still fails: assert self.info["subdir"] == 'noarch' AssertionError

The only step I took to try building as "noarch" was add noarch_python: True under the build: section of my conda recipe meta.yaml. Is there something I'm missing?

C1142 will always occur if any menu items are present

In checks.py, CondaPackageCheck.check_menu_json_name() requires paths to start with "Menu" + os.path.sep and then compares it to os.path.normpath("{}.json".format(self.name)) which will never be equal.

Example:
"Menu/foo.json" vs "foo.json"

Verify noarch does not have binaries

Would be good to have a check to verify that noarch packages do not have binaries (e.g. .sos, .dylibs, .dlls/.libs, etc.) included in the package. Assuming there is not already such a check.

Doesn't support `.conda`

Checklist

  • I added a descriptive title
  • I searched open reports and couldn't find a duplicate

What happened?

I changed conda-build to output .conda and conda-verify failed

conda-build:
    pkg_format: 2

Conda Info

No response

Conda Config

No response

Conda list

No response

Additional Context

No response

Extend `anaconda copy` to allow name changes

Checklist

  • I added a descriptive title
  • I searched open requests and couldn't find a duplicate

What is the idea?

I'd like to be able to download some conda binaries like https://anaconda.org/agunapal/torchserve/files which is called torchserve-0.6.0.dev20220709-py39_0.tar.bz2 rename it to torchserve-0.6.0-py39_0.tar.bz2 and then promote it to https://anaconda.org/agunapal

So basically I'd like an extension of anaconda copy --old-name conda-forge/glueviz/0.10.4 --new-name conda-forge/glueviz-official/0.30 --to-owner jsmith

Why is this needed?

My team has a Github Action that takes care of uploading conda binaries for our package on a nightly basis pytorch/serve#1685

When that PR is landed we will be able to do official releases by using another manually triggerable Github Action which takes in as arguments a nightly release date to promote from and an official release version to promote to. The script will work by downloading a nightly release, renaming it and then reuploading. This is fairly easy to do with PyPi and especially easy with Docker with their docker tag

I'd like a similar process for Conda as well

What should happen?

No response

Additional Context

No response

Carriage return in noarch packages

While building a noarch package on Windows, conda-verify complains about non-ASCII characters:

C1116 Found non-ascii characters inside info/index.json
C1119 Found filenames in info/files containing non-ascii characters

As far as I understand, this is caused by carriage return characters at end of line, which conda-verify ignores only if "platform" == "win" in index.json. See here, here and here. In my index.json I have "platform": null instead.

Should conda-verify accept carriage returns also for noarch packages?

Or should instead conda-build avoid them?

Option to run package checks only or run meta.yaml checks only

In conda-forge as we have our own linter for meta.yaml, it would be nice to integrate conda-verify's meta.yaml checks into it. This would help make recipe problems of this nature prominent and in a form that user's of conda-forge are familiar with. Along these lines it would be nice also to have an option to just run checks on the final package, which would need to be performed on CIs.

Version specs containing "!=" operator flagged as invalid

Package match specifications containing the PEP440 "!=" operator are flagged as being invalid by conda-verify, even though the documentation indicates such specs to be valid, and such specs are correctly parsed and installed by conda install.

Example of a requirement that causes spurious C1114 / C2114 errors:

trafaret <2.2,>=0.7,!=1.1.0

No check of file names in info/paths.json (deprecate conda-verify?)

Checklist

  • I added a descriptive title
  • I searched open reports and couldn't find a duplicate

What happened?

A simple conda package (tar.gz format) which had was corrupt entries in info/paths.json passed conda verify package.tar.gz, but failed verification upon installation.

The package was for python3.10, but converted from linux-64 to win-64 with a conda convert predating conda-build 3.24.0, resulting in "_path": "lib/python3.10/site-packages/pkgname/__init__.py" being converted into "_path": "Lib/0/site-packages/pkgname/__init__.py" when the actual file location was Lib/site-packages/pkgname/__init__.py (and likewise for other entries in info/paths.json).

I could write another test, but it seems development has halted, so perhaps a better solution is to write a deprecation notice for this package and let conda verify invoke the same verifications which are invoked by conda install upon installation? That would avoid having two different codes for package verification code while keeping a simple way to verify packages with conda verify.

Conda Info

active environment : base
    active env location : C:\Users\gom\Anaconda3\envs\base310
            shell level : 2
       user config file : C:\Users\gom\.condarc
 populated config files :
          conda version : 23.5.0
    conda-build version : 3.24.0
         python version : 3.10.11.final.0
       virtual packages : __archspec=1=x86_64
                          __win=0=0
       base environment : C:\Users\gom\Anaconda3\envs\base310  (writable)
      conda av data dir : C:\Users\gom\Anaconda3\envs\base310\etc\conda
  conda av metadata url : None
           channel URLs : https://repo.anaconda.com/pkgs/main/win-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/win-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-64
                          https://repo.anaconda.com/pkgs/msys2/noarch
          package cache : C:\Users\gom\Anaconda3\envs\base310\pkgs
                          C:\Users\gom\.conda\pkgs
                          C:\Users\gom\AppData\Local\conda\conda\pkgs
       envs directories : C:\Users\gom\Anaconda3\envs\base310\envs
                          C:\Users\gom\.conda\envs
                          C:\Users\gom\AppData\Local\conda\conda\envs
               platform : win-64
             user-agent : conda/23.5.0 requests/2.29.0 CPython/3.10.11 Windows/10 Windows/10.0.19045
          administrator : False
             netrc file : None
           offline mode : False

Conda Config

No response

Conda list

No response

Additional Context

No response

Where'd the .egg-info file come from???

@ilanschnell Did you help with this? Shouldn't that cause conda-verify to fail it's own build? ๐Ÿ˜œ

drwxr-xr-x  16 kfranz  staff   544B Nov 16 18:45 /conda/lib/python2.7/site-packages/conda_verify/
-rw-rw-r--   2 kfranz  staff   5.2K Nov  7 12:54 /conda/lib/python2.7/site-packages/conda_verify-2.0.0-py2.7.egg-info

also

kfranz@0283:~/continuum/conda *master โฏ ls -al /conda/pkgs/conda-verify-2.0.0-py27_0/lib/python2.7/site-packages/
total 16
drwxr-xr-x   4 kfranz  staff   136B Nov 16 18:45 ./
drwxr-xr-x   3 kfranz  staff   102B Nov 16 18:45 ../
drwxr-xr-x  16 kfranz  staff   544B Nov 16 18:45 conda_verify/
-rw-rw-r--   2 kfranz  staff   5.2K Nov  7 12:54 conda_verify-2.0.0-py2.7.egg-info

Specify pyyaml as a requirement in `install_requires` (setup.py)

Being used at: https://github.com/conda/conda-verify/blob/master/conda_verify/utilities.py#L5
Already mentioned in recipe: https://github.com/conda/conda-verify/blob/master/recipe/meta.yaml#L19

(cvtest) [root@b6388225965d /]# pip install https://github.com/conda/conda-verify/archive/master.zip
Collecting https://github.com/conda/conda-verify/archive/master.zip
  Downloading https://github.com/conda/conda-verify/archive/master.zip (109kB)
    100% |################################| 112kB 1.0MB/s 
Collecting click>=6.7 (from conda-verify==3.0.0)
  Using cached click-6.7-py2.py3-none-any.whl
Collecting jinja2>=2.9 (from conda-verify==3.0.0)
  Using cached Jinja2-2.9.6-py2.py3-none-any.whl
Collecting backports.functools_lru_cache>=1.4 (from conda-verify==3.0.0)
  Using cached backports.functools_lru_cache-1.4-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from jinja2>=2.9->conda-verify==3.0.0)
Installing collected packages: click, MarkupSafe, jinja2, backports.functools-lru-cache, conda-verify
  Running setup.py install for conda-verify ... done
Successfully installed MarkupSafe-1.0 backports.functools-lru-cache-1.4 click-6.7 conda-verify-3.0.0 jinja2-2.9.6

(cvtest) [root@b6388225965d /]# conda-verify
Traceback (most recent call last):
  File "/m2/envs/cvtest/bin/conda-verify", line 11, in <module>
    load_entry_point('conda-verify==3.0.0', 'console_scripts', 'conda-verify')()
  File "/m2/envs/cvtest/lib/python2.7/site-packages/pkg_resources/__init__.py", line 570, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/m2/envs/cvtest/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2751, in load_entry_point
    return ep.load()
  File "/m2/envs/cvtest/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2405, in load
    return self.resolve()
  File "/m2/envs/cvtest/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2411, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/m2/envs/cvtest/lib/python2.7/site-packages/conda_verify/cli.py", line 6, in <module>
    from conda_verify.verify import Verify
  File "/m2/envs/cvtest/lib/python2.7/site-packages/conda_verify/verify.py", line 5, in <module>
    from conda_verify.checks import CondaPackageCheck, CondaRecipeCheck
  File "/m2/envs/cvtest/lib/python2.7/site-packages/conda_verify/checks.py", line 20, in <module>
    from conda_verify.utilities import all_ascii, get_bad_seq, get_object_type, ensure_list
  File "/m2/envs/cvtest/lib/python2.7/site-packages/conda_verify/utilities.py", line 5, in <module>
    import yaml
ImportError: No module named yaml

C1141 complains on Continuum-built noarch packages

conda-verify attrs-19.1.0-py_0.tar.bz2
-------------------------
attrs-19.1.0-py_0.tar.bz2
-------------------------
[C1141] Found python file "site-packages/attr/_config.py" without a corresponding pyc file

This checks seems to be outdated as it looks for py3 in the build string, and fails on packages from the official anaconda channel.

Raise an error if recipe is compiled against Debug libraries on Windows

Actual Behavior

conda-build allows packages it creates to be linked against the Visual Studio debug libs (VC140RUNTIMED.DLL etc). Most users do not have these installed (and we don't/can't distribute them with conda) leading to an error when the user tries to use the package.

This can be hard to pin down since the problem package may be in a package that is used by the one that gives the error.

The CI's have the debug libs installed so any tests etc appear to pass.

Expected Behavior

An error should be raised and the build should fail if any of the produced binaries link against the Visual Studio debug libs.

Steps to Reproduce

Create a cmake package and omit to pass CMAKE_BUILD_TYPE=Release is a common one, but there are probably any number of ways to mistakenly create a debug build depending on the package's build system.

xref: conda-forge/gdal-feedstock#354 conda-forge/qgis-feedstock#71

cc: @ocefpaf @marcelotrevisani

C1115 is based on definitions with incoherent case

On "constants.py" when "conda_build.license_family.allowed_license_families" is not avaible the licenses are (somewhat) CamelCase, but "allowed_license_families" defines all as uppercase. On the other hands, an uppercase "PROPRIETARY" doesn't look so common, so maybe it could be better a case-insensitive control.

Requirements?

Am a little unclear on the requirements of this package. Does it depend on conda, some sort of yaml parser, etc.? Maybe including a development recipe in this repo would help make this information more accessible.

verification reports C2114 Found invalid dependency for "pandas >=0.15"

This might be a conda-verify 3.0.1 issue or might be my misunderstanding of what constitutes a valid version spec.

I have a spec with the following requirements which did not cause a problem with conda-verify-2.0.0.

requirements:
  build:
    - python
    - setuptools
  run:
    - python
    - python-hdfs
    - pandas >=0.15

With conda-verify 3.0.1, conda-build errors with C2114 Found invalid dependency "pandas >=0.15" in info/index.json, suggesting the pandas version spec is somehow invalid.

Failure seen while installing conda-verify in linux-ppc64le Ubuntu Container

Hi,

Am trying to install conday-verify inside a ppc64le Ubuntu container. But getting the following failure.

# conda install conda-verify
Fetching package metadata .......
Solving package specifications: .


PackageNotFoundError: Package not found: '' Package missing in current linux-ppc64le channels:
  - conda-verify

Close matches found; did you mean one of these?

    conda-verify: anaconda-verify

You can search for packages on anaconda.org with

    anaconda search -t conda conda-verify

Am I missing on soemthing? Any pointer would be helpful.

Regards,
Archa

build skip outdated python, traceback

I had an outdated skip setting in my meta.yaml
skip: true # [py35 or py37]

conda verify looked up numpy for py3.5 without success and crahed

mss-feedstock/recipe$ conda-verify .Verifying ./meta.yaml...
{'platform': 'linux', 'arch': '64', 'python': '27', 'numpy': '1.11'}
Setting build platform. This is only useful when pretending to be on another platform, such as for rendering necessary dependencies on a non-native platform. I trust that you know what you're doing.
Setting build arch. This is only useful when pretending to be on another arch, such as for rendering necessary dependencies on a non-native arch. I trust that you know what you're doing.
Adding in variants from internal_defaults
Adding in variants from config.variant
{'platform': 'linux', 'arch': '32', 'python': '27', 'numpy': '1.11'}
{'platform': 'osx', 'arch': '64', 'python': '27', 'numpy': '1.11'}
{'platform': 'win', 'arch': '32', 'python': '27', 'numpy': '1.11'}
{'platform': 'win', 'arch': '64', 'python': '27', 'numpy': '1.11'}
{'platform': 'linux', 'arch': '64', 'python': '34', 'numpy': '1.11'}
{'platform': 'linux', 'arch': '32', 'python': '34', 'numpy': '1.11'}
{'platform': 'osx', 'arch': '64', 'python': '34', 'numpy': '1.11'}
{'platform': 'win', 'arch': '32', 'python': '34', 'numpy': '1.11'}
{'platform': 'win', 'arch': '64', 'python': '34', 'numpy': '1.11'}
{'platform': 'linux', 'arch': '64', 'python': '35', 'numpy': '1.11'}
[]
Traceback (most recent call last):
  File "/home/user/miniconda3/bin/conda-verify", line 11, in <module>
    sys.exit(cli())
  File "/home/user/miniconda3/lib/python3.7/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/home/user/miniconda3/lib/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/user/miniconda3/lib/python3.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/user/miniconda3/lib/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/user/miniconda3/lib/python3.7/site-packages/conda_verify/cli.py", line 32, in cli
    meta = render_metadata(path, cfg)
  File "/home/user/miniconda3/lib/python3.7/site-packages/conda_verify/utilities.py", line 105, in render_metadata
    return m.get_rendered_recipe_text()
AttributeError: 'list' object has no attribute 'get_rendered_recipe_text'

Because conda-verify fails on all CIs for python 3.7 those didn't succeed. I guess the skip rule would be checked afterwards. Is that on these systems different implemented? In my case python 2.7, 3.6 succeeds.

conda-verify may be run once similiar to the conda-forge-linter ?

I fixed it now by just removing the skip line.
conda-forge/mss-feedstock#41

Conda-verify wrongly reports C1129 on Windows

This is possibly due to / v/s \

(root) [root@3b0b4a3a078a ~]# conda-verify qt-5.6.2-vc9hc26998b_12.tar.bz2 
Verifying qt-5.6.2-vc9hc26998b_12.tar.bz2...
qt-5.6.2-vc9hc26998b_12.tar.bz2: C1115 Found invalid license "LGPL-3.0" in info/index.json
qt-5.6.2-vc9hc26998b_12.tar.bz2: C1127 Found both .bat and .exe files in executable directory
qt-5.6.2-vc9hc26998b_12.tar.bz2: C1129 Found filename ""Library/bin/Qt5Core.dll"" in info/has_prefix not included in archive
qt-5.6.2-vc9hc26998b_12.tar.bz2: C1134 Found pre/post link file "Scripts/.qt-post-link.bat" in archive

(root) [root@3b0b4a3a078a ~]# python -m tarfile -l qt-5.6.2-vc9hc26998b_12.tar.bz2  | grep Qt5Core.dll
Library/bin/Qt5Core.dll 

Cannot parse patches that contain preprocessing selectors

The # [linux] selector in this example:

source:
  url: https://www.freedesktop.org/software/fontconfig/release/fontconfig-{{ version }}.tar.bz2
  sha256: {{ sha256 }}
  patches:
    - fcf.patch           # [linux]

leads to:

Traceback (most recent call last):
  File ".../bin/conda-verify", line 11, in <module>
    load_entry_point('conda-verify==3.0.0', 'console_scripts', 'conda-verify')()
  File ".../lib/python3.6/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File ".../lib/python3.6/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File ".../lib/python3.6/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File ".../lib/python3.6/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File ".../lib/python3.6/site-packages/conda_verify/cli.py", line 35, in cli
    checks_to_ignore=ignore, exit_on_error=exit)
  File ".../lib/python3.6/site-packages/conda_verify/verify.py", line 67, in verify_recipe
    in dir(recipe_check) if method.startswith('check') and
  File ".../lib/python3.6/site-packages/conda_verify/verify.py", line 68, in <listcomp>
    getattr(recipe_check, method)() is not None]
  File ".../lib/python3.6/site-packages/conda_verify/checks.py", line 470, in check_for_valid_files
    source_patches.extend(source.get('patches', []))
TypeError: 'NoneType' object is not iterable

C1115 Found invalid license "Proprietary" in info/index.json

According to notes in #55, the 'Proprietary' option is among the allowed license families. What makes this "invalid"? Is this just a matter of using case-insensitive checks?

code links

summary length of 80 is not documented

conda-verify complains if the summary is longer than 80 characters, but this is not documented. Furthermore, this number seems rather arbitrary to me and leads to problems if you import projects (and their summary) from PyPI into conda.

TypeError in check_windows_arch (menuinst package CI)

In PR conda-forge/menuinst-feedstock#2, AppVeyor CI fails with the following error:

INFO:conda.gateways.disk.delete:rm_rf failed for c:\users\appveyor\appdata\local\temp\1\tmpl4pwk8
Traceback (most recent call last):
  File "C:\Miniconda-x64\Scripts\conda-build-script.py", line 5, in <module>
    sys.exit(conda_build.cli.main_build.main())
  File "C:\Miniconda-x64\lib\site-packages\conda_build\cli\main_build.py", line 342, in main
    execute(sys.argv[1:])
  File "C:\Miniconda-x64\lib\site-packages\conda_build\cli\main_build.py", line 333, in execute
    noverify=args.no_verify)
  File "C:\Miniconda-x64\lib\site-packages\conda_build\api.py", line 97, in build
    need_source_download=need_source_download, config=config)
  File "C:\Miniconda-x64\lib\site-packages\conda_build\build.py", line 1524, in build_tree
    config=config)
  File "C:\Miniconda-x64\lib\site-packages\conda_build\build.py", line 1159, in build
    built_package = bundlers[output_dict.get('type', 'conda')](output_dict, m, config, env)
  File "C:\Miniconda-x64\lib\site-packages\conda_build\build.py", line 939, in bundle_conda
    path_to_package=tmp_path)
  File "C:\Miniconda-x64\lib\site-packages\conda_verify\verify.py", line 30, in verify_package
    getattr(package_check, method)() is not None]
  File "C:\Miniconda-x64\lib\site-packages\conda_verify\checks.py", line 309, in check_windows_arch
    file_object_type = get_object_type(file_header)
  File "C:\Miniconda-x64\lib\site-packages\conda_verify\utilities.py", line 117, in get_object_type
    return "DLL " + DLL_TYPES.get(i)
TypeError: cannot concatenate 'str' and 'NoneType' objects
Command exited with code 1

It looks like there could be something wrong in the parsing of .exe or .dll headers in the get_object_type function.

Relevant files of the package are here.

See also regro/cf-scripts#46.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.