构建 python 项目的非常“简单”的方法是什么?

2024-03-08

所以我有一个需要处理文件的 python 东西。

首先是:

my_project/
├── script.py

我会简单地运行它python script.py file.csv.

然后它长大并成为:

my_project/
├── script.py
├── util/
│   └── string_util.py
├── services/
│   └── my_service.py

(有一个空__init__.py在每个目录中)

But now my_service.py想要使用string_util.py如何很好地做到这一点实在是太不简单了。

我想要做from ..util import string_util in my_service.py(这是导入到script.py with from services import my_service),但这不适用于python script.py since my_service's __name__那么只有services.my_service(我得到了Attempted relative import beyond toplevel package)

  • 我可以cd .. and python -m my_project.script,但这看起来很不自然,并且将其放在自述文件中以获取如何运行它的说明是非常糟糕的。

  • 现在我正在用丑陋的方式解决它sys.path.append() hack.

我还有什么其他选择?


这与观点接壤,但我会分享我对此的看法。

您应该以不同的方式看待您的项目。选择一个执行点,并从那里引用您的导入,以避免您尝试解决的所有奇怪的相对导入。因此,查看您的项目结构:

my_project/
├── script.py
├── util/
│   └── string_util.py
├── services/
│   └── my_service.py

正如您当前所做的那样,从内部执行代码my_project。这样你所有的进口should就这一点而言。因此,您的导入实际上如下所示:

# my_service.py

from util.string_util import foo

另一种思考方式是,如果您要移动项目或拥有 CI,则需要确保指定要从中执行的项目根目录。记住这些事情,并指定应该执行项目的单个执行点,将使您在处理构建包和模块并适当引用它们时变得更加轻松,从而允许其他系统正确使用您的项目无需处理奇怪的相对进口。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建 python 项目的非常“简单”的方法是什么? 的相关文章

随机推荐

  • Angular 无法使用 res.download 从 Express 获取文件下载

    在我的应用程序中 我在后端创建一个文件 然后我希望通过浏览器下载将其传递给用户 我已经尝试过无数次 这是 Express 后端 app get download req res gt res download filename txt fu
  • R中的指数曲线拟合

    time 1 100 head y 0 07841589 0 07686316 0 07534116 0 07384931 0 07238699 0 07095363 plot time y 这是一条指数曲线 在不知道公式的情况下如何在这条
  • 多态值类型和接口

    我有一个多态值类型 如下实现 class ShapeValue public template
  • 错误:CI_DB_mysql_result 类的对象无法转换为字符串

    我是 CodeIgniter 的新手 我尝试阅读 CI 的文档 但仍然无法解决我的问题 也许这里有人可以帮助解决我的问题 这是我的代码 在我的控制器中 class Registration extends CI Controller fun
  • 将第二个数据库添加到 alembic 上下文中

    我想在迁移过程中连接到第二个外部数据库 以将其部分数据移至本地数据库中 最好的方法是什么 将第二个数据库添加到 alembic 上下文后 我不知道该怎么做 在迁移期间如何在数据库上运行 SQL 语句 这就是我的env py现在看起来像 fr
  • 将多个变量从 HTML 传递到 PHP

    我想将两个变量传递到我的 php 页面 下拉变量工作得很好 但是当我添加一个附加变量时 它只发送 0 而不是我在表单中输入的内容 我觉得我已经非常接近这个问题的解决方案了 当我替换这一行上的数字时 xmlhttp open GET getd
  • Haskell:“Num [a] => a”和“Num a => [a]”之间有什么区别

    显然 我的类型签名已关闭 我现在已经知道原因了 现在 我有兴趣了解有关 GHCI 对我的拼写错误推断的签名的更多信息 我试图让这段代码工作 elemNum Eq a Num b gt a gt a gt b elemNum e l f e
  • 为什么我的 build.gradle android studio 中没有 allprojects{}?

    我正在开发一个 Android 应用程序 我需要将 PayPal 付款方式添加到该应用程序 所以我使用这个 https developer paypal com docs business native checkout android h
  • MariaDB Galera集群设置问题

    我正在尝试启动并运行 mariadb 集群 但它对我来说不起作用 现在我在 64 位 Red hat ES6 机器上使用 MariaDB Galera 5 5 36 我通过这里的存储库安装了 mariadb mariadb name Mar
  • pandas 切割多列

    我希望在多个列中应用一个容器 a 1 2 9 1 5 3 b 9 8 7 8 9 1 c a b print pd cut c 3 labels False 效果很好并创造了 0 0 2 0 1 0 2 2 2 2 2 0 但是 我想应用
  • 显示来自MySQL数据库的php中的所有表名

    好吧 我对 PHP 和 SQL MySQL 还很陌生 所以非常感谢您的帮助 我觉得我采取了正确的方法 我在 php net 上搜索 MySQL 显示所有表名称 它返回了一个已弃用的方法 并建议使用 MySQL 查询SHOW TABLES F
  • 如何更改Font Awesome感叹号三角形图标的内部白色?

    如何更改图标的内部 白色 颜色 i class fa fa exclamation triangle i 附 正在申请 i class fa fa exclamation triangle style color red i 不是答案 因为
  • 将 Admob 添加到 Libgdx 游戏

    我正在休憩本教程 https www youtube com watch v cwAN4LMXo58但是当我尝试进入货币化页面时 我无法货币化或添加任何横幅 因为与教程不同 我的游戏不在商店中 我的问题是 我是否需要在不添加 admob 代
  • 安排交互式 UILocalNotification - Obj-C

    我正在尝试安排一个互动UILocalNotifaction 我的尝试是使用以下代码 这是我从中获取的tutorial https nrj io simple interactive notifications in ios 8 NSStri
  • Twilio 客户端语音通话扬声器开/关问题

    我在用Twilio 客户端 https www twilio com docs api client ios用于通话的语音通话服务 在这里 我遇到了斯皮克开 关功能的问题 我可以将通话静音 取消静音 但无法打开 关闭扬声器 我有两个功能的相
  • 使用正则表达式匹配多行文本

    我正在尝试使用 Java 来匹配多行文本 当我使用Pattern类与Pattern MULTILINE修饰符 我能够匹配 但我无法这样做 m 相同的图案与 m 并使用String matches似乎不起作用 我确信我错过了一些东西 但不知道
  • Kohana v3.1.0 ORM _ignored_columns -- 既然它消失了,我该怎么办?

    看来在 Kohana 的 ORM v3 1 0 中 ignored columns财产已被删除 处理数据库中不存在的字段的推荐技术是什么 我现在的情况是password confirm 其中password是一个字段 但我们要求用户输入密码
  • 白色背景上带有透明标题的 iOS UIButton

    我有一个习惯UIButton具有透明背景和白色标题 我正在寻找一个简单的解决方案来反转它的突出显示 白色背景和透明标题 因为它是在系统上实现的UISegmentedControl 有没有比反转用作快照的 alpha 更简单的解决方案CALa
  • 连接到恢复的数据库时 Datomic 抛出 ActiveMQInternalErrorException

    我从 dev 存储备份了 Datomic v0 9 5786 数据库 datomic datomic pro 0 9 5786 bin datomic Xmx4g Xms4g backup db datomic dev localhost
  • 构建 python 项目的非常“简单”的方法是什么?

    所以我有一个需要处理文件的 python 东西 首先是 my project script py 我会简单地运行它python script py file csv 然后它长大并成为 my project script py util st