无法在OsX Mavericks上创建可导入的python模块

时间:2014-10-23 19:04:59

标签: python macos osx-mavericks

我写了一个自定义的python模块。它由几个主题在3个.py文件之间划分的函数组成,这些文件都在我的主目录中名为microbiome的同一目录中。所以我的自定义模块目录的整个路径是:

/Users/drosophila/microbiome

我正在研究OsX Mavericks。我想在python脚本中导入这个模块,我从不同的目录运行。

我尝试通过修改microbiome

/etc/paths目录添加到路径中
sudo nano /etc/paths

然后在/etc/paths我写道:

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/Users/drosophila/blast-2.2.22/bin
/Users/drosophila/blast-2.2.22/
/Users/drosophila/microbiome

我也尝试按以下方式编辑.bash_profile

export PATH="/Users/drosophila/microbiome:/Users/drosophila/anaconda/bin:$PATH"

似乎'microbiome'目录已成功添加到路径中,因为echo $PATH显示目录在那里:

/Users/drosophilq/anaconda/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usearch:/Users/drosophila/blast-2.2.22/bin:/Users/drosophila/blast-2.2.22/:/Users/drosophila/microbiome:/opt/X11/bin:/usr/texbin

但是,当我尝试在python中导入microbiome模块时,它坚持认为这样的模块不存在。我有Python 3.4.1 | Anaconda 2.0.1

'microbiome'目录包含一个空的__init__.py文件。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

正如<{3}}中所述,执行此操作的正确方法是创建基于setup.py的项目。

然后,您可以使用例如项目根目录中的pip3 install .来安装任何特定Python安装(或虚拟环境)的代码。这样可以确保所有内容都通过适当的布局复制到一些适当的site-packages目录中,以便导入该Python安装。

尝试做标准工具自己做的事情只是让自己变得更难。


话虽如此,如果你真的,真的想要,关键是你需要将你的新目录放到sys.path中以进行你想要的Python安装。修改PATH/etc/paths不会做到这一点。修改PYTHONPATH会,但会影响每次安装。执行此操作的方法是添加.pth文件和/或sitecustomize.py文件,如Python Packaging User Guide模块的文档中所述。

我不知道你的Anaconda网站套餐在哪里(你可以在Python中找到import sys; print(sys.path)),但是让我们说/usr/local/anaconda/lib/python3.4/site-packages 。因此,您可以在该目录中创建microbiome.pth文件,其中包含/Users/drosophilia/microbiome目录的绝对路径。然后,每次启动Python时,该目录都将添加到sys.path,您的导入将起作用。


还值得注意的是,如果您只是想重复使用一个目录,就好像它是少数几个不同项目的一部分,而您甚至不想考虑&#34;安装&# 34;或者类似的东西,甚至有更简单的方法:将目录符号链接到不同的项目中。或者,如果您正在使用版本控制,请创建一个git子模块。或各种其他类似的等价物。然后,看起来每个项目只包含microbiome作为该项目的一部分,您不必担心路径或其他任何内容。

答案 1 :(得分:1)

正如您所发现的,/etc/paths会影响$PATH。但$PATH不会影响Python查找模块的位置。请尝试使用$PYTHONPATH。有关详细信息,请参阅man python