打包带有依赖项的单个Python模块

时间:2013-09-11 17:24:55

标签: python python-3.x packaging setuptools distribute

我有一个带有一些依赖项的单个Python3 .py模块(lockfile,python-daemon)。是否有一种简单的方法来将其与其依赖关系打包,以便用户不需要下载和安装其他模块?所有包含的安装都是我想要做的。

我试着查看setuptools,分发和distutils,结果比我开始时更加困惑。

5 个答案:

答案 0 :(得分:1)

我经常使用的最简单的方法是将所有依赖项放在一个文件中(通常名为requirements.txt),然后让用户运行以下命令:

pip install -r requirements.txt

以下是文件内容(https://github.com/cenkalti/pypi-notifier/blob/master/requirements.txt)的示例:

Flask==0.10.1
Flask-Cache==0.12
Flask-SQLAlchemy==1.0
Flask-Script==0.5.3
GitHub-Flask==0.3.4
Jinja2==2.7
MarkupSafe==0.18
SQLAlchemy==0.8.2
...

答案 1 :(得分:1)

cx_Freeze应该做你想要的。

答案 2 :(得分:0)

你可以很容易地用一些包含所有文件的.zip文件来做这件事;只要所有文件都导出到同一目录,那么它们应该全部工作!如果模块有很多依赖项,那就是失败,即它们有额外的文件夹,你需要找到它们。

我也认为有相当数量的人/公司编写自己的包装系统,以便所有模块都在1 .py文件中,在控制台中打开并将所有内容导出到正确的位置。这需要相当多的工作,所以你可以尝试找到一个预建的。我已经采用了这种方法,它并没有证明太费力的单位我不得不解压缩.zips文件...

作为另一种解决方案,您可以尝试PyExe(我认为它被称为)将所有内容导出到单个.exe文件(仅限Windows)

我个人没有使用过setuptools,发布或者是distutils所以不幸的是不能评论那些。

要记住的另一件事是每个模块的许可证,有些可能不允许重新分配,所以请先检查!

答案 3 :(得分:0)

py2exe很好,但会限制你使用Windows。

在不限制受众群体并遵循公认的最佳做法的情况下,最好的方法是创建requirements.txtsetup.py文件,然后将项目上传到github。请参阅https://github.com/sourcegraph/python-deps作为参考。 requirements.txt以简单易读的格式列出依赖项,并使用setup.py中的scriptspy_modules选项指定项目安装的命令和库模块。 / p>

假设您的git存储库位于github.com/foo/bar,您的用户可以pip install git+https://github.com/foo/bar

答案 4 :(得分:0)

Read official Python packaging tutorial

  • 您可以使用setup.py

  • 从模块创建Python包
  • requirements.txt中,您可以声明必须安装其他Python包作为依赖项

  • 此外,您可以使用{{1}}缩小应用程序特定的依赖项版本。