尝试导入 Python 文件时可以使用破折号吗?

2025-02-28 08:24:00
admin
原创
60
摘要:问题描述:基本上当我有一个像这样的python文件时:python-code.py 并使用:import (python-code) 解释器给出语法错误。有什么想法可以解决此问题吗?python 文件名中的破折号是否不合法?解决方案 1:您应该查看PEP 8,即 Python 代码样式指南:包和模块名称 模块...

问题描述:

基本上当我有一个像这样的python文件时:

python-code.py

并使用:

import (python-code)

解释器给出语法错误。

有什么想法可以解决此问题吗?python 文件名中的破折号是否不合法?


解决方案 1:

您应该查看PEP 8,即 Python 代码样式指南:

包和模块名称 模块应使用简短的全小写名称。如果可以提高可读性,可以在模块名称中使用下划线。Python 包也应使用简短的全小写名称,但不鼓励使用下划线。

由于模块名称映射到文件名,并且某些文件系统不区分大小写并截断长名称,因此选择相当短的模块名称非常重要 - 这在 Unix 上不会是问题,但当代码传输到旧的 Mac 或 Windows 版本或 DOS 时可能会出现问题。

换句话说:重命名你的文件:)

解决方案 2:

代码中需要注意的另一件事是 import 不是一个函数。因此,正如一些人已经提到的import(python-code)那样import python-code,它被解释为“import python minus code”,而不是您想要的。如果您确实需要导入名称中带有破折号的文件,您可以执行以下操作::

python_code = __import__('python-code')

但是,正如上面提到的,这并不推荐。如果文件名是你能控制的,你应该更改它。

解决方案 3:

结论

破折号并不违法,但你不应该使用它们,原因有三:

  1. 需要特殊语法来导入带有破折号的文件

  2. 没人会想到模块名称中会有破折号

  3. 这违反了Python 风格指南的建议

如果您确实需要导入带破折号的文件名,则特殊语法如下:

module_name = __import__('module-name')

好奇为什么我们需要特殊语法?

之所以使用特殊语法,是因为您在编写时import somename创建了一个带有标识符的模块对象somename(因此您稍后可以使用它somename.funcname)。 当然module-name不是一个有效的标识符,因此使用特殊语法可以给出一个有效的标识符。

您不明白为什么模块名称不是有效的标识符?

别担心——我也没有。这里有一个技巧可以帮助您:看看这个 Python 行:x=var1-var2。您是否在赋值右侧看到减法或带破折号的变量名?

附言

我的答案没有任何原创内容,只是将我认为与其他答案中最相关的信息放在一个地方

解决方案 4:

问题是python-code不是标识符。解析器将其视为python减号code。当然,这不会满足您的要求。您需要使用也是有效 Python 标识符的文件名。尝试-用下划线替换 。

解决方案 5:

在 Python 3 上使用import_module:

from importlib import import_module
python_code = import_module('python-code')

更一般地,

import_module('package.subpackage.module')

解决方案 6:

您可能可以通过一些__import__hack 导入它,但如果您还不知道如何导入,则不应该这样做。Python 模块名称应该是有效的变量名称(“标识符”)——这意味着如果您有一个模块foo_bar,您可以在 Python 内部使用它(print foo_bar)。如果名称很奇怪,您将无法这样做(print foo-bar-> 语法错误)。

解决方案 7:

尽管正确命名文件是最好的方法,但如果python-code不受我们控制,使用黑客手段__import__比复制、重命名或以其他方式弄乱其他作者的代码要好。但是,我试过了,除非我重命名文件并添加扩展名,否则它不起作用.py。在查看 文档以了解如何获取描述后.py,我最终得到了以下结果:

import imp

try:
    python_code_file = open("python-code")
    python_code = imp.load_module('python_code', python_code_file, './python-code', ('.py', 'U', 1))
finally:
    python_code_file.close()

python-codec它在第一次运行时创建了一个新文件。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2941  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1803  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   31  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   31  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   28  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用