【问题标题】:Python - imports and folder structurePython - 导入和文件夹结构
【发布时间】:2018-08-22 19:38:27
【问题描述】:

我的文件结构如下:

command.py
simulations
  basis
    basis.py
  hamiltonian
    hamiltonian.py

其中不带扩展名的名称是文件夹。

  • command.py 正在导入 basis.pyhamiltonian.py 喜欢:

从基础.basis 导入基础

从 hamiltonian.hamiltonian 导入 Hamiltonian

其中BasisHamiltonian 是两个类。

我可以运行command.py 很好,所有导入都可以。

  • 现在,我想单独使用hamiltonian.py,但它需要导入basis.py

  • 为了使command.py 正常工作,hamiltonian.py 中的导入必须是 from basis.basis import Basis

  • 为了让 hamiltonian.py 自己运行,导入需要是

    os.chdir('..')
    from basis.basis import Basis
    但是这使得command.py 不再起作用了。

--

1) 只有在 hamiltonian.py 独立运行时,我才能以某种方式运行 os.chdir('..') 吗?喜欢if <strong>name</strong> == 'main'

2) 有没有更优雅的解决方案?

【问题讨论】:

  • 你需要 __init__.py 文件在那些将充当模块的目录中(我想是模拟) 然后在命令中你有.from simulations.whatever.whatever 导入任何东西 在hamiltonians from simulations.whatever.whatever导入任何东西
  • 是的,我有一个 init。问题是命令也使用了hamiltonian
  • 从外观上看...这看起来像是一个糟糕的类设计!
  • @NoobEditor 那么请告诉我更好的方法是什么? basic.py 和 hamiltonian.py 正在生成我保存在同一个文件夹中的 npy 数组和 pdf。这就是为什么我想把它们放在单独的文件夹中。那么对于这种文件夹结构,您认为哪种类设计更好?
  • Google 一些关于 repo 结构和初始化文件包和模块的信息。不想失礼,但几个月后你会感谢我的。

标签: python import


【解决方案1】:

1) 可以,但这不是一个好主意。最好避免使用os.chdir

2)您需要os.chdir 的事实表明您正在尝试在本地运行它,例如:

python ./simulations/hamiltonian/hamiltonian.py

如果是这种情况,请使用:

PYTHONPATH=. python ./simulations/hamiltonian/hamiltonian.py

如果您正确安装 python 包并且您的包具有@E.Serra 建议的正确__init__.py 文件,则不会遇到此问题。

【讨论】:

  • 对不起,正确安装是什么意思?它们都是我编写的脚本。我的 init 是空的,它就在那里,因此该文件夹被视为 python 存储库。 init 必须是“正确的”什么?
  • 查看stackoverflow.com/questions/42494229/…安装本地python包。空的__init__.py 文件很好; “正确”是指您将它们放在所有需要的目录中(即在simulations 以及basishamiltonian 中)
  • 我肯定有所有的 inits,因为如果我只使用 chdir,我可以找到所有的导入。为什么我不应该使用 os.chdir
  • 导入我的脚本和安装本地包有什么区别?
  • 另外从我可以看到 PYTHONPATH 仅在从终端运行东西时使用?我确实在尝试在本地运行它,但总是在 spyder 中
猜你喜欢
  • 2014-01-08
  • 2018-11-21
  • 2019-03-15
  • 1970-01-01
  • 2022-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
相关资源
最近更新 更多