【问题标题】:Creating a package with several python files创建一个包含多个 python 文件的包
【发布时间】:2020-05-02 12:36:06
【问题描述】:

我有一个文件夹结构:

setup_seplot.py
seplot/
        __init__.py      (empty)
        seplot.py
        kw_dictionaries.py

在 seplot.py 中,我有:

import kw_dictionaries as kd

如果我运行 seplot.py,一切正常。

但是,当我使用 setup_seplot.py 时出现问题:

python setup_seplot.py sdist bdist_wheel
Traceback (most recent call last):
  File "setup_seplot.py", line 2, in <module>
    from seplot import seplot as sep
  File "/home/XXXXX/code/Python-Tools/seplot/seplot.py", line 14, in <module>
    import kw_dictionaries as kd
ModuleNotFoundError: No module named 'kw_dictionaries'

这个问题似乎来自于在 setup_seplot 中,我导入 seplot 来获取版本:

setup_seplot.py:

from setuptools import setup, Extension, find_packages
from seplot import seplot as sep

version=sep.__VERSION__
setup(
     name='seplot',
     version=version,
     description="A front-end for Python PyX",
     install_requires=[ 'pyx', ],
     packages=find_packages(),
     scripts=['seplot/bin/seplot','seplot/seplot.py',
        'seplot/kw_dictionaries.py','seplot/style_dictionaries.py']
 )

如果在 seplot.py 我替换

import kw_dictionaries as kd

作者:

from . import kw_dictionaries as kd

然后设置工作正常,但代码 (setup.py) 没有。 我在这里很迷茫。

【问题讨论】:

标签: python package setuptools


【解决方案1】:

【讨论】:

  • 谢谢,但是这在实践中会是什么样子???我尝试将 kw_dictionaries.py 保存在一个单独的文件夹中(在 seplot/ 内),但我遇到了完全相同的问题!
  • 我想任何组织的真正问题是我在安装脚本中从项目中导入了一个包。但我需要这个将版本传递给安装文件。否则传递版本的干净方法是什么?
  • 对于版本字符串,使用packaging.python.org/guides/single-sourcing-package-version的建议5 -- 更好的是,使用`importlib_metadata.version('ProjectName') docs.python.org/3/library/…
  • @SergeD 对此仍有困难或问题已得到解答?
  • 我觉得已经解决了,谢谢!我将用一个更小(基本上)的项目进行更多测试,以确保我完全理解它。
【解决方案2】:

根据Gocht 的建议,在another topic 中找到了解决方案。

感觉很老套,我似乎不明白为什么,但这很有效:

if __package__:
    import seplot.kw_dictionaries as kd
else:
    import kw_dictionaries as kd

【讨论】:

    猜你喜欢
    • 2016-07-15
    • 1970-01-01
    • 2013-10-28
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    相关资源
    最近更新 更多