【问题标题】:Created a PyPi package, but can't import modules after installing创建了一个 PyPi 包,但安装后无法导入模块
【发布时间】:2018-09-11 19:37:41
【问题描述】:

我的项目结构如下:

.
├── LICENSE
├── README.md
├── setup.py
└── src
    ├── __init__.py (with name="packagename")
    ├── module1
    │   ├── __init__.py (with import for each code file)
    │   └── (several code files)
    └── module2
        ├── __init__.py
        └── (similar structure to module1, total of 4 modules like this)

我已经创建了 dist 文件并将它们上传到 TestPyPI 并安装到一个测试项目中。我希望能够导入诸如import packagename.module1 之类的模块,但它给了我No module named packagename

setup.py 中的 setuptools.setup 参数包含如下条目:

packages=["packagename"],
package_dir={"packagename": "src"},
py_modules=["packagename.module1", "packagename.module2" ... ]

知道为什么我在安装软件包后似乎无法导入吗?

我在项目中的 src 之外有各种示例测试脚本,我可以在其中以 from src.module1 import ClassName 访问模块(尽管如果可能的话,在导入时将 src.module1 替换为 packagename.module1 会很好)。

【问题讨论】:

    标签: python setuptools pypi


    【解决方案1】:

    py_modules 用于声明位于项目根目录的 single-file 模块。包目录的子目录,如 module1module2 需要通过在 packages 中列出来声明:

    packages=["packagename", "packagename.module1", "packagename.module2" ...]
    

    【讨论】:

    • 嗯,我刚刚将我的包条目更新为 ["packagename", "packagename.module1", ...] 但我似乎仍然无法导入,无论是“来自包名import module1”、“import packagename *”等。我也尝试过“from module1 import Class1”,但无济于事。如果我转到站点包目录(测试项目)并找到目录“packagename”,我可以看到包含“name='packagename'”的 init.py 和包含四个模块的目录,其中反过来有他们所有的代码。每个模块中的 init.py 对模块中的每个类都有导入(来自 packagename import Class1...)。
    • @bingecoder: packagename/module1/__init__.py 存在于您的site-packages 中,您仍然无法导入它?您确定您运行的 Python 版本与安装软件包时所用的 Python 版本相同吗?
    • 2.7.15 在打包项目和测试项目中。在 setuptools.setup 分类器中,我有 ""Programming Language :: Python :: 2"
    • 我想知道我是否对安装过程有些困惑。我已经运行“python -m pip install --index-url test.pypi.org/simple packagename”并安装(到/home/username/anaconda2/lib/python2.7/site-package),但是我还有一个额外的步骤吗在我可以导入之前丢失了吗?我正在使用 pycharm,通常我只是使用项目解释器 gui 来查找和安装包,所以也许这会为我执行一些我没有在此手动过程中执行的步骤(这是我第一次尝试进行部署在 Python 中)。
    • 更新:看起来如果我通过终端进入 Python 并“导入包名”我没有收到错误...所以这一定是我的测试项目没有看到的问题我认为已安装的软件包。我看起来可以在终端中创建我的类和所有内容的实例......
    【解决方案2】:

    这是一个问题,需要通过我正在使用的虚拟环境使用 python 命令进行安装(而不是我在安装包时在终端中活动的那个),而不是我的包装问题!

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 2013-10-25
      • 2017-07-08
      • 1970-01-01
      • 2021-07-06
      • 2018-04-23
      相关资源
      最近更新 更多