I plan open source some python script files which import from NumPy (BSD license), scikit-learn (New BSD License) and Keras (MIT license). However, I do not modify and/or redistribute (parts of the) code from those projects. I assume that the users of my scripts will setup copies of NumPy, scikit-learn and Keras on their own (e.g. by providing a requirements.txt file usable by Pip).

EDIT (due to @Brandin's comment): From what I understand so far there are two steps.

  1. In order to use Numpy, scikit-learn and Keras as a developer in the first place, I have to accept their respective licenses. This affects me in any case – independently of how I may use/modify/share/redistribute the licensed software.
  2. By accepting their licenses, I have to obey the terms of those licenses which primarily tell me how I may

    • redistribute source code from / redistribute in binary form using Numpy
    • redistribute source code from / redistribute in binary form using scikit-learn
    • make copies or substantial portions of Keras

    Basically the licenses ask me to retain/include/reproduce the specific copyright notices and permissions in the redistributions/copies I make using the licensed software.

Regarding the case I stated in the first paragraph (publishing code which imports licensed software to a repository on GitHub which does not include copies of the licensed software): Does that case qualify as redistributing code or copying code? If so: How do I practically retain the copyright notices and permissions (where do I place what license files)?

  • 3
    The way you've phrased the question is a little confusing ("what obligations do I have to obey?"). The obvious answer is that you have to obey all of them, since in order to use (say, NumPy) in an "import" statement, you have to first download it to your computer. And downloading is making a copy. And in order to make a copy legally, you need to accept the license. Luckily, the licenses you mentioned all specifically allow you to do this. But they only allow you to do it because you accepted the license.
    – Brandin
    Commented Feb 13, 2020 at 19:08
  • @Brandin Hopefully I clarified my question. Commented Feb 14, 2020 at 9:08
  • 1
    Any licence that limits use, is not a Free-Software/Open-Source licence. Copying, modifying, etc is limited by copyright. A Free-Software/Open-Source licence reduces this limitation. (Some proprietary licences try to add more limits, but it is not clear if these are legally enforceable.) Commented Feb 17, 2020 at 10:03

1 Answer 1


If you write your own module which just imports other modules (but does not contain them in the distribution itself, thus referencing and using them in a requirements.txt or similar), you do not distribute them.

The point you have to look out for, is any license clauses in the libraries / modules which disallow their usage in cases you want to allow (e.g. commercial usage). Yet all three modules (numpy, scikit-learn, keras) have real open-source licenses (BSD, MIT) which do not restrict usage; they only put some restrictions on modification and (re-)distribution which do not apply here.

If you distribute your programme in binary form (e.g. using cxfreeze or similar), it does include the modules / libraries used and you distribute them as well. In that case you need to abide by the requirements of the BSD and MIT license and make the copyright notice available to your users.

As usual: IANAL, so take my word with a grain of salt.

  • Take a look at e.g. Chez Scheme (it's on github), it includes several packages under a variety of licenses.
    – vonbrand
    Commented Feb 17, 2020 at 0:32
  • Thanks! You just made me realize there's a legal difference between a program bundling a library vs linking to a separately distributed library!
    – geekley
    Commented Aug 7, 2020 at 1:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.