【问题标题】:Importing custom python module导入自定义 python 模块
【发布时间】:2021-02-20 18:56:19
【问题描述】:

我正在创建 pip 包,在提交之前我想尝试一下。为简单起见,我们假设 python 脚本如下所示:

def foo():
    print("Hello World!")

我的 setup.py 包含元数据如下所示:

#!/usr/bin/env python3
from setuptools import setup, find_packages

    setup(
        name="test_super_secret",
        version="1.0",
        description="testing pip version 1",
        packages=find_packages(),
    )

我已经使用Wheel 编译了脚本,所以我可以通过 pip 安装它:

user@pc:$ python -m pip install dist/test_super_secret-1.0-py2-none-any.whl 
Processing ./dist/test_super_secret-1.0-py2-none-any.whl
Installing collected packages: test-super-secret
Successfully installed test-super-secret-1.0

但是,当我无法从 python 导入此类模块时:

    >>> import test-super-secret
  File "<stdin>", line 1
    import test-super-secret
               ^
SyntaxError: invalid syntax

我做错了什么?我应该以其他方式导入它还是应该更改设置以便可以导入模块?

编辑: 模块即使在setup.py中调用testsupersecret也无法导入:

>>> import testsupersecret
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named testsupersecret

【问题讨论】:

    标签: python import pip python-module python-wheel


    【解决方案1】:

    test-super-secret 不是有效的模块名称——模块名称(或变量)中不能有连字符,python 认为这是一个减号,这就是你得到无效语法的原因。您应该使用下划线(您可能已经在使用基于您的setup.py -- name="test_super_secret",只需尝试导入test_super_secret)。

    (Python 包的名称中可以有连字符,这可能是混淆的来源。所以test-super-secret 是 pip 包的有效名称,但模块必须命名为test_super_secret。)

    【讨论】:

    • test-super-secret 不是有效的模块名称,这是真的。但是,当我在setup.py 中将名称更改为testsupersecret 时,我仍然无法导入这样的模块并出现错误:ImportError: No module named testsupersecret。无论如何,从最初的问题来看,pip 是从哪里得到名字 test-super-secret 的?是来自setup.py 的名称,下划线更改为连字符吗?
    【解决方案2】:

    看起来我没有正确的文件夹结构来获取模块作为库。一旦我创建了包含__init__.py 的目录并将我的脚本移动到该目录,我就能够导入像import &lt;MyLibrary&gt;.&lt;my_script_name&gt; 这样的模块

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 2021-07-31
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多