首页 > 编程问答 >如何为非 CS 受众导入包?

如何为非 CS 受众导入包?

时间:2024-07-25 06:37:32浏览次数:7  
标签:python python-packaging

第一个较大的项目需要使用许多包、模块等。我一直在阅读官方 Python 文档和答案,其中讨论了组织包的“正确”方式,但似乎没有达成共识。假设我有这个目录:

application
├── src
│   └── package
│       └── __init__.py
│       └── module.py
│       └── module2.py
├── scripts
│   └── some_script.ipynb
└── more_scripts
    └── some_script.ipynb

我的目标是将 src/package 内的模块中的函数导入到所有这些脚本中。我看过很多关于设置 PYTHONPATH 或 syspath 或使用 importlib 或使用相对导入的讨论 - 所有这些策略似乎都被某些用户组所反对。

我的问题是: 什么是最佳实践将这些模块显式导入到所有脚本中? 如果相关的话,我正在尝试将其推送到 Github 上,以供非 CS 人员的受众使用。理想情况下,他们不必设置 PATHS 之类的东西。

提前感谢您的帮助。

我已经尝试过设置 PYTHONPATH,但我认识到这可能对面向非 CS 的存储库最终用户提出了要求.

我尝试过设置 syspath,但 Slackoverflow 似乎不喜欢这个。

Slackoverflow 似乎不喜欢相对导入,但显式导入不起作用,因为脚本不是包。


是对的,没有一种“正确”的方法来组织 Python 包,而且许多经常被提到的解决方案(比如修改 PYTHONPATH 或使用复杂的相对导入)对于不熟悉 Python 的用户来说可能很麻烦。

为了实现的目标,即让非 CS 用户能够轻松运行的脚本,而无需处理任何路径设置,我建议采用以下方法,该方法结合了最佳实践和用户友好性:

  1. 使用 setup.py 安装包:

  2. 在的 application 文件夹中创建一个 setup.py 文件。这将允许将 src/package 作为本地包安装在用户的环境中,以便的脚本可以像导入任何其他第三方库一样导入它。

  3. setup.py 文件应如下所示:

    ```python from setuptools import setup, find_packages

    setup( name='mypackage', # 选择一个描述性名称 version='0.1.0', # 更新版本号 packages=find_packages('src'), package_dir={'': 'src'}, ) ```

  4. 在脚本中使用绝对导入:

  5. 安装包后,可以在脚本中使用绝对导入来导入模块:

    ```python from mypackage import module, module2

    # 现在可以使用模块中的函数: module.some_function() module2.another_function() ```

  6. 提供清晰的说明:

  7. 在的 README 文件中,提供分步说明,说明用户如何运行的脚本:

    1. 安装依赖项: 让他们运行 pip install -e . (在 application 文件夹中),这将使用 setup.py 安装的包,以及在 requirements.txt 中列出的任何其他依赖项(如果适用)。
    2. 运行脚本: 让他们运行 python scripts/some_script.ipynb python more_scripts/some_script.ipynb

这种方法有以下优点:

  • 用户友好: 用户只需要运行一个命令来安装所有必要的包,然后就可以运行脚本,而无需担心路径或复杂导入。
  • 最佳实践: 使用 setup.py 是打包和分发 Python 代码的标准方法。它使的项目更易于维护和共享。
  • 避免相对导入问题: 使用绝对导入可以防止在项目结构发生变化时出现潜在问题。

通过遵循这些步骤,可以创建一个对非技术用户来说易于使用和理解的 Python 项目。

标签:python,python-packaging
From: 78790831

相关文章

  • 使用 python Flask 发送邮件中的图像
    我想发送一封包含html代码和图像的电子邮件但在gmail中它说图像已附加,我不想要这样,我只想要电子邮件正文中的图像。html_content=f"<imgsrc="cid:banner"alt=""style="width:80%;">"msg=MIMEMultipart('related')html_part=MIMEText(html_c......
  • 在 python requests modul 中,如何检查页面是否使用“POST”方法或“GET”方法
    如何使用python“requests”模块检查页面是否使用“GET”方法或“POST”方法。我期望输出为True或False,或者GET或Post预期代码:importrequestsurl=f"www.get_example.com"response=requests.get(url)ifresponse.check_get==True:print("get")你......
  • VS Code Python - 如果括号(括号、大括号等)未关闭,内联建议不起作用
    我遇到的问题是,当我在未闭合的括号或方括号“内部”开始变量名称时,VSCode将不会显示任何建议。但是,如果在键入变量名称之前闭合括号,则建议效果很好。如果我可以避免它,我宁愿不将自动完成括号关闭设置为True也不使用TabOut扩展。第一个屏幕截图显示建议在闭括号/方......
  • 在 Azure 上部署代码时使用 Python 的多处理模块是否有意义?
    我们的团队在Azure机器学习(AML)上部署了一个Python脚本来处理存储在Azure存储帐户上的文件。我们的管道由一个ForEach活动组成,该活动调用每个或列出的文件的Python脚本。从Azure数据工厂(ADF)运行它会触发多个单独的管道同时运行......
  • 我已成功安装 pypdf2 但无法将其导入到我的 python 文件中
    我已经成功安装了pypdf2模块,但在导入它时,我发现该模块丢失了。我尝试使用fromPyPDF2importPdfReader导入,但它不起作用此问题的各种解决方案是什么?在尝试导入PyPDF2时遇到问题。以下是可能导致此问题的一些常见原因和解决方案:安......
  • Python3打开图片时请求ConnectionResetError(10054)
    我试图从'http://xxx.jpg'之类的网站下载图片。代码:headers={'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/66.0.3359.139Safari/537.36'}url='http://xxx.jpg'resp......
  • Jupyter Notebook 环境中的 Python 版本不匹配
    我遇到Jupyter笔记本启动横幅中报告的Python版本与我在笔记本中查询python--version时显示的版本之间的差异。启动横幅指示Python3.11.9,但是当我运行!python--version时,它返回Python3.11.7。我所做的步骤:basecondahas3.11.7versio......
  • Python XML 解析:字符串中的“<”被阻塞
    我有一个使用ET.XMLParser来解析CppCheckXML报告文件的Python模块。当尝试解析字符串中包含“<”的XML元素中的属性之一时,它会令人窒息,它会将其解释为格式错误的XML,例如:<errormsg="Includefile<iostream>notfound.">(注意字符和“iostream”之间的空格必须放......
  • 任意几行代码要成为Python中的函数需要什么?
    我正在上一门计算机科学课,我的任务是创建一个程序来实现一个带有参数的函数。我的老师告诉我,下面的代码不是一个函数,这让我很困惑,对于将某些代码行归类为“函数”所需的条件,我感到很困惑。defgame(numbers,max_turns,pfl,tgl):turns=0flag=Falseprint("You......
  • 如何使用 Python 创建新的 Azure 订阅?
    我正在尝试使用PythonSDK以编程方式创建新的Azure订阅。我发现的对AzurePythonSDK的唯一引用是这个这是我最终得到的结果:importazure.mgmt.billingimportazure.mgmt.subscriptioncreds=AzureCliCredential()client_name='test'defcreat......