我应该把我自己的Python模块,以便它可以导入

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

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

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

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

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


编辑:一旦你创build它,它将显示在sys.path

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

所以如果你的新手像我自己和你的目录没有很好的组织,你可能想尝试这种方法。

打开你的pythonterminal。 在我的情况下导入一个你知道工作的模块,比如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

要做到这一点,只需去你的terminal,然后键入

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

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

这是对我有用的东西(我必须经常创build上传到私人点子库的Python包)。 详细阐述了@joran对这个问题的评论。

  1. 创build一个“构build目录”,用作工作区来创build包。 你select的任何目录都可以
  2. 复制你的Python包dir,并创build一个setup.py文件。 这应该有助于正确创buildsetup.py。
  3. 为您正在开发的项目创build一个virtualenv 。 virtualenvs有一堆其他的好处,我不在这里详细介绍。
  4. 创build一个本地的dist包python setup.py sdist --format=tar 。 创build的包应该在dist文件夹中。
  5. 在virtualenv上安装软件包(激活之后)。 pip install <yourpackage>.tar

你可以使用pip install --force-reinstall如果你需要更多地使用库并重新创builddist包。

我发现这个方法对我很好。 如果你不需要打包模块来使用其他系统而不是只使用本地模块,这种方法可能是一个矫枉过正的方法

快乐黑客。

在我的Mac上,我做了一个sudo find / -name "site-packages" 。 这给了我几个path/Library/Python/2.7/site-packages/opt/X11/lib/python2.6/site-packages

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

希望能帮助到你。

例:

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

而不是“时间”你可以使用其他包,你刚才安装,但python无法看到它“

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

假设你已经用下面的命令安装了python模块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正在查找的特定用户帐户。

解决scheme – 我们必须从pyserial到达python所在的path创build符号链接。

符号链接创build命令将是:

 ln -s <what_to_link> <where_to_link> 

而不是input确切的位置,我们要求点通过执行命令告诉我们它存储模块的位置:

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

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

 python -m site --user-site 

两个命令都必须用“`”字符转义(通常在美式键盘的1button的左侧)

在结果下面的命令将提供给ln和缺less的符号链接将被创build:

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

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