Python 3 包和脚本中导入的最佳实践

2023-12-02

考虑这个简单的文件夹结构:

root
  Package1
    x.py
    y.py
  Package2
    z.py
  Examples
    main.py

现在我们的要求是:

  • x.py需要导入y.py
  • z.py需要导入y.py
  • main.py需要导入y.py和z.py

下面是有效的:

x.py

import y

def x():
  y()

y.py

def y():
  pass

z.py

import package1.y as y

def z():
  y.y()

main.py

import sys
from os import path
sys.path.append(  path.dirname(  path.dirname( path.abspath(__file__) ) ) )

import package1.y as y
import package2.z as z

y.y()
z.z()

问题:

  1. 这是在 Python 3 中设置导入的最佳且推荐的方法吗?
  2. 我真的不喜欢改变sys.path in main因为它强烈约束关于包裹位置的假设inside代码文件。有什么办法解决这个问题吗?
  3. 我也很不喜欢多余的东西as y参与import package1.y as y。有什么办法解决这个问题吗?

与往常一样,有两个单独的步骤:

  1. 您编写的代码针对abstract包的命名空间,其中包含package1 and package2 (and sys, os, etc.),但不是“Examples”,它不是一个包(因为main.py不是一个模块)。
  2. You set sys.path适当地before您的任何代码都可以运行。如果是您自己的(卸载的)代码,则有你可以放置它的地方,或者您可以编写一个简单的 shell 脚本包装器来设置PYTHONPATH为您python过程。

所以你的问题的答案是

  1. In x.py你写from . import y。 (Python 2 支持这一点,3 则需要它。)
  2. 你如何设置sys.path取决于您的包装/环境系统。传统的方法是设置PYTHONPATH环境变量为python过程,但还有其他涉及诸如site module.
  3. from package1 import y是通常只命名事物一次的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 3 包和脚本中导入的最佳实践 的相关文章

  • 切片稀疏(scipy)矩阵

    我将不胜感激任何帮助 以理解从 scipy sparse 包中切片 lil matrix A 时的以下行为 实际上 我想根据行和列的任意索引列表提取子矩阵 当我使用这两行代码时 x1 A list 1 x2 x1 list 2 一切都很好
  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • Kivy - 文本换行工作错误

    我正在尝试在 Kivy 1 8 0 应用程序中换行文本 当没有太多文字时 一切正常 但如果文本很长并且窗口不是很大 它只是剪切文本 这是示例代码 vbox BoxLayout orientation vertical size hint y
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 当我在 Pandas 中使用 df.corr 时,我的一些列丢失了

    这是我的代码 import numpy as np import pandas as pd import seaborn as sns import matplotlib pyplot as plt data pd read csv dea
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • 如何使用 paramiko 查看(日志)文件传输进度?

    我正在使用 Paramiko 的 SFTPClient 在主机之间传输文件 我希望我的脚本打印文件传输进度 类似于使用 scp 看到的输出 scp my file user host user host password my file 1
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • 解析根元素内元素之间的 XML 文本

    我正在尝试用 Python 解析 XML 以下是 XML 结构的示例 a aaaa1 b bbbb b aaaa2 a
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 如何使用 matplotlib 为圆柱体的每个单独面添加颜色

    我正在尝试为圆柱体的每个面着色 但是我不确定如何进行 我尝试了以下方法 for i in range 10 col append for i in range 10 for j in range 20 col i append plt cm
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 如何使用 ui-router 将对象从 1 $state 发送到另一个 $state

    https plnkr co edit nqyBTcBgBimjkrpf2oYo p preview Expected After Login Selecting a Ticker button should make the Tags m
  • 如果元标记出现在文档正文中会发生什么?

    我正在开发一个 ASP 应用程序 代码 模板和文件的组织方式不允许我更改 body 标记之外的任何内容 所以我正在考虑在正文中插入元标记 像这样 div class dynamic content div
  • 类内友元运算符似乎不参与重载决策

    在编写允许类提供重载的 CRTP 模板时operator 基于模板参数 我发现如果类内友元运算符的参数都不属于它定义的类的类型 则该运算符似乎不会参与重载决策 煮沸 enum class FooValueT zero one two cla
  • 在 Python 中生成随机十六进制颜色

    对于 Django 应用程序 每个 成员 都被分配了一种颜色以帮助识别它们 它们的颜色存储在数据库中 然后在需要时打印 复制到 HTML 中 唯一的问题是我不确定如何生成随机数Hexpython django 中的颜色 生成 RGB 颜色很
  • 如何使用预加载器和多个图像显示加载状态?

    我正在构建一个包含数百张图像的幻灯片 并希望构建一个漂亮的加载栏 因此我的想法是使用 JavaScript 预加载图像 然后初始化 UI 的其余部分 预加载图像不是问题 但让浏览器在加载时更新状态才是问题 我已经尝试了一些方法 但浏览器只会
  • 在Rails中,是否可以限制谁可以使用api登录google?

    是否可以只允许某些谷歌帐户登录 例如 email protected 是通过谷歌托管 他们实际上是谷歌帐户 我只想要用户 mycompany能够登录这可能吗 你用 devise 还是 google api 来做这个 谢谢 如果您正在使用om
  • 当键在字典中时出现键错误

    只是试图从一堆照片的 EXIF 数据中提取一些纬度 经度信息 但代码抛出了一个KeyError即使稍后 成功 使用该键来打印特定坐标 有问题的字典是 tags GPS GPSLatitude and GPS GPSLongitude 都是键
  • NSMutableArray 中的lastObject 是否返回对象的副本?

    我有一个与这段代码相关的问题 NSNumber lastObject self myStack lastObject if lastObject self myStack removeLastObject return lastObject
  • 点击事件时清除 QLineEdit

    我正在使用给定的代码 我希望用户在 QLineEdit 小部件中输入文本 然后按复制 按钮并看到输入的文本替换了 N A 标签 我的问题是 按照此过程 如何通过简单的鼠标单击清除 QLineEdit 小部件中输入的文本 从我读到的 this
  • 旋转方法已弃用,相当于“didRotateFromInterfaceOrientation”?

    我正在尝试实施新的viewWillTransitionToSizeiOS 8 中引入的方法 所有其他旋转方法已被弃用 我想知道相当于什么didRotateFromInterfaceOrientation现在是因为我们需要执行许多清理任务 但
  • 为什么我们不能使用 new 关键字创建活动?

    为什么我们必须使用意图来启动活动 为什么我们不能使用 Activity a new Activity 启动它 我尝试在android开发者中搜索但没有得到任何答案 可以 但它不会完全初始化 Activity 上有一系列函数需要以正确的顺序调
  • Java - 私有和包私有枚举构造函数之间的区别[重复]

    这个问题在这里已经有答案了 最近我经常使用枚举 所以我想知道 私有枚举构造函数和没有任何可见性修饰符的枚举构造函数 包私有 之间有什么区别吗 枚举的构造函数是隐式的private 就像接口和注释的方法是隐式的public abstract
  • 如何在运行时正确压缩 UIImages

    我需要加载 4 个图像进行同时编辑 当我从用户库加载它们时 内存超过 500mb 并且崩溃 以下是我尝试进行任何压缩之前原始分配转储的日志 Code var pickedImage UIImage data imageData Instru
  • 如何从我的应用程序打开标准 Google 地图应用程序?

    一旦用户按下我的应用程序中的按钮 我想打开标准的 Google 地图应用程序并显示特定位置 我该怎么做 不使用com google android maps MapView 你应该创建一个Intent具有 geo URI 的对象 Strin
  • LibGDX 保存纹理以避免上下文丢失

    我的基于 LibGDX 的 Android 应用程序中有一个纹理 它是通过 FrameBuffers 按程序创建的 我需要通过上下文丢失来保留它 而且似乎唯一有效的方法就是简单地保存数据 无论是作为完整图像还是原始图像数据 输出 并在时间到
  • 使用 spring security 自定义注释

    我已阅读 Spring Security 文档 并了解到我可以使用以下注释来检查主题是否有权编辑用户 PreAuthorize hasPermission USER EDIT public String editUSer User user
  • 如何计算文本字符串中的单词数?

    在 iOS 上 如何计算特定文本字符串中的单词数 比拆分更有效的方法是逐个字符检查字符串 int word count NSString s CFCharacterSetRef alpha CFCharacterSetGetPredefin
  • 在 Angular js 中调用 $sce.trustAsHtml() 字符串内的函数

    我正在使用 Angularjs 开发一个应用程序并添加HTML using sce trustAsHtml 在我的页面中 我想在上面动态添加的内容中调用一个函数 我的 html 和脚本如下 HTML div div p p div div
  • HTML 字段集内容在 100% 高度溢出 (Chrome)

    我的 HTML 有问题fieldsetChrome 中的元素 我想要一个固定高度fieldset 其中有一个可滚动的div 一切看起来都很好 直到我把legend 当我这样做时 div从底部溢出fieldset 我还在 Firefox 中进
  • Python 3 包和脚本中导入的最佳实践

    考虑这个简单的文件夹结构 root Package1 x py y py Package2 z py Examples main py 现在我们的要求是 x py需要导入y py z py需要导入y py main py需要导入y py和z