Python安装在本地目录。

我的目录树是这样的:

(local directory)/site-packages/toolkit/interface.py

我的代码在这里:

(local directory)/site-packages/toolkit/examples/mountain.py

为了运行这个例子,我编写了python mountain.py,在代码中我有:

from toolkit.interface import interface

我得到了一个错误:

Traceback (most recent call last):
  File "mountain.py", line 28, in ?
    from toolkit.interface import interface
ImportError: No module named toolkit.interface

我已经检查过系统了。这里有目录/site-packages。此外,我在工具包文件夹中有__init__.py.bin文件,以向Python表明这是一个包。我在examples目录中也有一个__init__.py.bin。

我不知道为什么Python无法在sys.path中找到该文件。什么好主意吗?会是权限问题吗?我需要一些执行许可吗?


当前回答

如果你正在使用安装脚本/实用程序(例如setuptools)来部署你的包,不要忘记将相应的文件/模块添加到安装程序中。


在支持的情况下,使用find_packages()或类似的方法自动向设置脚本添加新包。这绝对会让你免于头疼,尤其是当你把项目搁置一段时间,然后再添加一些东西的时候。

import setuptools

setuptools.setup(
    name="example-pkg",
    version="0.0.1",
    author="Example Author",
    author_email="author@example.com",
    description="A small example package",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.6',
)

(示例取自setuptools文档)

其他回答

如果你正在使用安装脚本/实用程序(例如setuptools)来部署你的包,不要忘记将相应的文件/模块添加到安装程序中。


在支持的情况下,使用find_packages()或类似的方法自动向设置脚本添加新包。这绝对会让你免于头疼,尤其是当你把项目搁置一段时间,然后再添加一些东西的时候。

import setuptools

setuptools.setup(
    name="example-pkg",
    version="0.0.1",
    author="Example Author",
    author_email="author@example.com",
    description="A small example package",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.6',
)

(示例取自setuptools文档)

我也有类似的问题。我创建了一个名为python3.6的新虚拟环境。

conda create -n python3.6 python=3.6
pip install pandas

一切正常,但当我运行脚本时,发生了一个错误

ModuleNotFoundError: No module named 'pandas'

我发现Python包的元数据和pip的缓存已经更新,但它实际上没有下载pandas包。 所以我试着让皮普重新安装

pip uninstall pandas --no-cache-dir
pip install pandas 

这就解决了问题。

在*nix上,还要确保PYTHONPATH配置正确,特别是它具有以下格式:

 .:/usr/local/lib/python

(注意开头的.:,这样它也可以在当前目录上搜索。)

它也可能在其他位置,取决于版本:

 .:/usr/lib/python
 .:/usr/lib/python2.6
 .:/usr/lib/python2.7 and etc.

我的问题是,我将带有__init__.py文件的目录添加到PYTHONPATH,而实际上我需要添加它的父目录。

这招对我很管用: 在父文件夹内创建__init__.py文件(在您的情况下,在site-packages文件夹内)。并像这样导入:

from site-packages.toolkit.interface import interface

希望对你也有用!