Python:使用下载的模块

11 投票
3 回答
13955 浏览
提问于 2025-04-16 03:42

我刚开始学Python,之前都是用自己的代码。不过现在我下载了一个包,想用它来解决我遇到的问题。

这是个例子结构:

root\
    externals\
        __init__.py
        cowfactory\
            __init__.py
            cow.py
            milk.py

    kittens.py

现在,cowfactory的 __init__.py 文件里有 from cowfactory import cow 这行代码。这会导致导入错误。

我可以把这行代码改成 from externals.cowfactory import cow 来解决问题,但我觉得这样做不太方便,可能还有更简单的方法。

另一种解决办法是把cowfactory包放在我项目的根目录,但这样也显得不太整洁。

我觉得我需要对externals目录里的 __init__.py 文件做点什么,但我不太确定该怎么做。

3 个回答

1

一般来说,你可以使用 easy_installpip 来帮你把需要的东西安装到合适的地方。如果你在 Windows 上,通常会有一个叫 site-packages 的文件夹,你可以把包放到那里,如果你因为某些原因不能使用 easy_install 的话。在 Ubuntu 系统上,这个文件夹是 /usr/lib/pythonX.Y/dist-packages。你可以在网上搜索一下你自己系统的具体位置。或者,你也可以把它放在你的 PYTHONPATH 环境变量中的任何地方。

一般来说,最好不要把第三方库放在你程序的目录结构里(虽然对于这个问题,不同的人有不同的看法,尤其是在源代码管理方面)。这样可以让你的目录结构保持尽可能简洁。

1

最简单的方法是使用环境变量 $PYTHONPATH。在运行你的脚本之前,你可以这样设置:

export $PYTHONPATH=$PYTHONPATH:/root/externals/

你可以添加任意多个文件夹(只要用:分隔开),这样 Python 在导入时就会去这些文件夹里查找。

7

在cowfactory这个包里面,应该使用相对导入,比如说用from . import cow。在externals文件夹里,__init__.py文件其实不是必须的。假设你的项目放在根目录下,而cowfactory是你下载的外部包,你可以用两种不同的方法来处理:

  1. 安装外部模块

    外部的Python包通常会带有一个叫“setup.py”的文件,这个文件可以帮助你安装包。在Windows上,你可以用命令“setup.py bdist_wininst”,这样会在“dist”文件夹里生成一个EXE安装程序(前提是构建成功)。用这个安装程序就可以把包安装到Python的安装目录里。之后,你就可以像用import os那样直接用import cowfactory来导入了。

    如果你已经安装了pip或者easy_install:很多外部包都可以通过它们来安装(而且pip还支持简单的卸载)。

  2. 在开发时使用PYTHONPATH

    如果你想把所有的依赖项都放在项目目录里,可以把所有外部包放在externals\文件夹里,然后把这个文件夹添加到PYTHONPATH中。如果你在使用命令行,可以创建一个批处理文件,里面写一些类似于

    set PYTHONPATH=%PYTHONPATH%:externals
    yourprogram.py
    

    我其实在做类似的事情,不过是用PyDev和Eclipse。在那里,你可以修改“运行配置”,把环境变量PYTHONPATH的值设置为“externals”。设置好环境变量后,你就可以在自己的模块里简单地用import cowfactory。注意,这比用from external import cowfactory要好,因为后者在你安装项目后就不再有效了(或者你得把所有外部依赖都作为一个叫“external”的包来安装,这样做其实不太好)。

当然,这些解决方案在Linux上也适用,只是命令不同。

撰写回答