我是Python的新手,大多使用自己的代码。但是现在我下载了一个我需要解决的软件包。
示例结构:
root\
externals\
__init__.py
cowfactory\
__init__.py
cow.py
milk.py
kittens.py
现在,cowfactory __init__.py
做from cowfactory import cow
。这会导致导入错误。
我可以修复它并将import语句更改为from externals.cowfactory import cow
但有些东西告诉我有一种更简单的方法,因为它不太实用。
另一个修复可能是将cowfactory包放在我的项目的根目录中,但这也不是很整洁。
我想我必须对externals目录中的__init__.py
文件做一些事情,但我不确定是什么。
答案 0 :(得分:7)
在cowfactory包中,应使用相对导入,例如from . import cow
。外部的__init__.py
文件不是必需的。假设您的项目位于root \并且cowfactory是您下载的外部包,您可以通过两种不同的方式完成:
安装外部模块
外部Python包通常附带一个允许您安装它的文件“setup.py”。在Windows上,它将是命令“setup.py bdist_wininst”,并且您将在“dist”目录中获得一个EXE安装程序(如果它正确构建)。使用该安装程序,该软件包将安装在Python安装目录中。之后,您可以像执行import cowfactory
一样import os
。
如果您安装了pip或easy_install:可以安装许多外部软件包(pip甚至可以轻松卸载)。
使用PYTHONPATH进行开发
如果要将所有依赖项保留在项目目录中,请将所有外部程序包保留在externals \文件夹中,然后将该文件夹添加到PYTHONPATH中。如果您使用的是命令行,则可以创建包含
之类的批处理文件set PYTHONPATH=%PYTHONPATH%:externals
yourprogram.py
我实际上在做类似的事情,但是使用PyDev + Eclipse。在那里,您可以更改“运行配置”以包含环境变量PYTHONPATH,其值为“externals”。设置环境变量后,您只需在自己的模块中import cowfactory
即可。请注意,这比from external import cowfactory
更好,因为在后一种情况下,一旦安装项目它就不再起作用了(或者你必须将所有外部依赖项安装为名为“external”的包,这是一个坏的主意)。
同样的解决方案当然也适用于Linux,但使用不同的命令。
答案 1 :(得分:1)
通常,您可以使用easy_install
我们的pip
在适当的目录中为您安装它。如果由于某种原因无法使用site-packages
,则窗口中有一个easy_install
目录,您可以放置该程序包。在ubuntu上,它是/usr/lib/pythonX.Y/dist-packages
。谷歌为您的特定系统。或者您可以将它放在PYTHONPATH
环境变量的任何位置。
作为一般规则,不将第三方库放在您的程序目录结构中是好的(尽管对于源控件有不同的意见)。这使您的目录结构尽可能简约。
答案 2 :(得分:1)
最简单的方法是使用环境变量$ PYTHONPATH。您可以在运行脚本之前进行设置,如下所示:
export $PYTHONPATH=$PYTHONPATH:/root/externals/
您可以根据需要添加任意数量的文件夹(单独提供:),python会在导入时查看所有这些文件夹。