我应该在哪里放置我自己的python模块,以便可以导入它

时间:2013-04-24 15:38:19

标签: python python-2.7

我在python中拥有自己的包,而且我经常使用它。什么是最优雅或传统的目录,我应该把我的包,所以它将被导入而不用PYTHONPATH或sys.path?

例如,网站包怎么样? /usr/lib/python2.7/site-packages
在python中复制并粘贴包是否常见?

6 个答案:

答案 0 :(得分:44)

我通常把我想要准备好的东西放在用户站点目录中:

~/.local/lib/pythonX.X/site-packages

要显示适用于您平台的正确目录,可以使用python -m site --user-site


编辑:创建后,它会显示在sys.path中:

mkdir -p "`python -m site --user-site`"

答案 1 :(得分:18)

因此,如果您这样的新手和您的目录组织得不是很好,您可能想尝试这种方法。

打开你的python终端。在我的情况下导入一个你知道可以工作的模块,例如numpy,并执行以下操作。  Import numpy

numpy.__file__

导致

'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages/numpy/__init__.py'

numpy.__file__的结果是你应该把python文件和你的模块放在一起的位置(numpy/__init__.py除外)所以对我来说就是

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages

要执行此操作,只需转到您的终端并输入

即可

mv "location of your module" "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages"

现在您应该可以导入模块了。

答案 2 :(得分:5)

这对我有用(我必须经常创建上传到私有pip存储库的python包)。详细阐述@joran对这个问题的评论。

  1. 创建一个"构建目录"它用作工作空间来创建包。您选择的任何目录都可以
  2. 在那里复制你的python包dir,并创建一个setup.py文件。 this应该有助于正确创建setup.py。
  3. 为您正在处理的项目创建virtualenv。 virtualenvs有很多其他好处,我不会在这里详细介绍。
  4. 创建一个本地dist包python setup.py sdist --format=tar。理想情况下,创建的包应位于dist文件夹中。
  5. 在virtualenv上安装软件包(激活后)。 pip install <yourpackage>.tar
  6. 如果您需要更多地使用库并重新创建dist包,则可以使用pip install --force-reinstall

    我发现这种方法对我很有用。如果您不需要将模块打包用于其他系统而不仅仅是本地系统,则此方法可能过度

    快乐的黑客攻击。

答案 3 :(得分:1)

在我的Mac上,我做了sudo find / -name "site-packages"。这给了我一些路径,例如/Library/Python/2.6/site-packages/Library/Python/2.7/site-packages/opt/X11/lib/python2.6/site-packages

所以,如果我使用v2.7或v2.6,我知道放置模块的位置。

希望它有所帮助。

答案 4 :(得分:1)

示例:

ln -s`pip show em | grep“位置”| cut -d“” - f2``python -m site --user-site`

而不是“em”你可以使用你刚刚安装的其他软件包,但python看不到它“

下面我会在评论中要求更详细地解释。

假设您已使用以下命令安装了python module em或pyserial(示例适用于ubuntu):

sudo pip install pyserial

,输出如下:

Collecting pyserial
  Downloading pyserial-3.3-py2.py3-none-any.whl (189kB)
    100% |████████████████████████████████| 194kB 2.3MB/s 
Installing collected packages: pyserial
Successfully installed pyserial-3.3

问题将是以下 - python无法看到模块pyserial,为什么? 因为安装模块的位置不是python正在查找的特定用户帐户。

解决方案 - 我们必须从pyserial到达python所在路径的路径创建符号链接。

符号链接创建命令将是:

ln -s <what_to_link> <where_to_link>

而不是输入确切的位置我们要求pip通过执行命令告诉我们存储模块的位置:

pip show pyserial | grep "Location"| cut -d " " -f2

而不是输入确切的位置我们要求python通过执行命令告诉我们它在哪里寻找正在安装的模块:

python -m site --user-site

两个命令都必须以“`”字符转义(通常在美国键盘的1个按钮的左侧)

将为ln提供

结果跟随命令,并将创建缺少的符号链接:

ln -s /usr/local/lib/python2.7/dist-packages /home/<your_username>/.local/lib/python2.7/site-packages 

或类似的东西,取决于您的发行版和python / pip默认值。

答案 5 :(得分:-1)

如果您要开发模块,建议您遵循此步骤。

import sys
sys.path.append("/home/mylinux/python-packages")

现在python-packages可以导入您保存在Python-interpreter中的任何模块。