Python 库 - 让它们在不属于我的 PC 上运行

标签 python

如果这是一个非常愚蠢的问题,我深表歉意,但我是Python新手,虽然我已经做了一些谷歌搜索,但我不知道如何表达我的搜索查询。

我正在编写一个依赖于一些库(pandas、numpy 等)的 python 脚本。在将来的某个时候,我将把这个脚本传递给我的大学,以便他们可以对其进行标记等。我相当有信心讲师将在他们的 PC 上安装 python,但我不能确定他们是否有相关的库。

我在脚本顶部添加了一个注释部分,概述了每个库的安装说明,但是是否有更好的方法来执行此操作,以便我可以确保无论它们拥有什么库,脚本都可以正常工作?

我的脚本标题的示例

############### - Instructions on how to import libraries - ###############

#using pip install openpyxl using the command - pip install openpyxl

#########################################################################

import openpyxl
import random
import datetime

最佳答案

分发代码是一个很大的章节,您可以根据当前的最佳实践和其他实践投入大量的时间来把事情做好。我认为问题的解决方案有不同程度的正确,越正确意味着更多的工作。所以你必须选择你觉得舒服并且可以开始的学位。

<小时/>

最佳路线

Python 支持packaging ,而分发代码最安全的方法就是打包。这允许您以安装代码的方式指定要求,同时也会自动安装所有依赖项。

您可以使用现有的 cookiecutter(即项目模板)来创建构建包所需的基础:

pip install cookiecutter
cookiecutter https://github.com/audreyr/cookiecutter-pypackage

运行它并回答随后的问题,将为您留下可以打包的 python 代码。您可以将所需的包添加到setup.py文件中:

requirements = ['openpyxl']

然后在源目录下添加脚本并使用以下命令构建包:

pip wheel .

假设您的项目名为 my_script,您获得了一个可以发送的新 my_script-0.1.0-py2.py3-none-any.wheel 文件给你的讲师。当他们使用 pip 安装它时,openpyxl 将自动安装(如果尚未安装)。

不幸的是,如果他们也应该能够执行您的代码,那么您还没有完成。在打包之前,您需要将 __main__.py 文件添加到 my_script 文件夹中,在其中导入并执行可运行的代码部分:

my_script/my_script/__main__.py:

from . import runnable_script

if __name__ == '__main__':
    runnable_script.run()

然后可以使用 python -m my_script 将安装的包作为模块运行

下一个最佳路线

如果您确实只有一个文件,并且想要与您的讲师沟通运行脚本所需的要求,请将您的脚本和名为 requirements.txt 的文件发送给他们,其中包含以下几行:

openpyxl

..就是这样。如果还有其他要求,请将它们放在单独的行中。如果讲师花费了大量时间使用 python,他们应该知道运行 pip install -rrequirements.txt 将安装运行您提交的代码所需的要求。

如果你真的必须走的路线

如果您的讲师都知道如何输入 python,然后输入脚本的名称,请使用 DudeCoders approach 。但请注意,在软件工程领域,在没有向用户提供交互式提示的情况下静默安装需求是一个巨大的禁忌。如果您打算从事编程工作,您应该尽早开始良好的实践。

关于Python 库 - 让它们在不属于我的 PC 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53297700/

相关文章:

Python:ValueError:无法将字符串转换为 float : 'D'

python - Pandas 关联表限制为 m 列 n 行

python - 逗号分隔范围机制如何在 Python 中工作?

python - django.core.exceptions.FieldDoesNotExist : model has no field named <function SET_NULL at 0x7fc5ae8836e0>

python - 比较 Python Pandas DataFrames 以匹配行

python - keras 中的图像到图像映射

python - 使用 Python 和 win32com 从 Outlook 检索电子邮件时突然出错

python - 如何将列表转换为多行字符串?

python - 获取 md5 校验和的完成百分比

python - 为什么不同的 multiprocessing.Value 对象指向相同的值?