Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于导入自定义包的Python3问题_Python_Python 3.x_Import - Fatal编程技术网

关于导入自定义包的Python3问题

关于导入自定义包的Python3问题,python,python-3.x,import,Python,Python 3.x,Import,我的项目层次结构(Python 3.5): 我正在尝试将我的项目(brp文件夹)动态转换为python包,并从任何地方调用其模块,如下所示: 从“main.py”执行: sys.path.insert(0, "/home/pavarine/Projects/brp") print('\n'.join(sys.path)) from brp import config 这给了我: /home/pavarine/Projects/brp /home/pavarine/Projects/brp /

我的项目层次结构(Python 3.5):

我正在尝试将我的项目(brp文件夹)动态转换为python包,并从任何地方调用其模块,如下所示:

从“main.py”执行:

sys.path.insert(0, "/home/pavarine/Projects/brp")
print('\n'.join(sys.path))
from brp import config
这给了我:

/home/pavarine/Projects/brp
/home/pavarine/Projects/brp
/usr/lib/python35.zip
/usr/lib/python3.5
/usr/lib/python3.5/plat-x86_64-linux-gnu
/usr/lib/python3.5/lib-dynload
/home/pavarine/.local/lib/python3.5/site-packages
/usr/local/lib/python3.5/dist-packages
/usr/lib/python3/dist-packages
在这里,我可以清楚地看到我的项目根路径现在位于sys.path中,但是当我尝试导入“config.py”时,我遇到了一个错误:

从“main.py”执行:

sys.path.insert(0, "/home/pavarine/Projects/brp")
print('\n'.join(sys.path))
from brp import config
结果:

ImportError: No module named 'brp'

我做错了什么?

通常,你可以用两种方法中的一种来构建项目

根文件夹中有一个模块

brp/
    brp.py
或者您将多个模块放入一个子文件夹中:

mymod/
    mymod/
        __init__.py
        a.py
        b.py
最简单的解决方案是在现有的
brp
中添加一个子文件夹
brp
,并移动该子文件夹中的所有内容。导致:

brp/
    brp/
        __init__.py
        config.py
        main.py
        lib/
             __init__.py
             Class1.py

\uuuu init\uuuuu.py
文件非常简单,因此python知道这些是子模块。有关更多信息,这里有几条指南。通常,您可以采用两种方法中的一种来构建项目

根文件夹中有一个模块

brp/
    brp.py
或者您将多个模块放入一个子文件夹中:

mymod/
    mymod/
        __init__.py
        a.py
        b.py
最简单的解决方案是在现有的
brp
中添加一个子文件夹
brp
,并移动该子文件夹中的所有内容。导致:

brp/
    brp/
        __init__.py
        config.py
        main.py
        lib/
             __init__.py
             Class1.py

\uuuu init\uuuuu.py
文件非常简单,因此python知道这些是子模块。有关更多信息,这里有一些指南,包括这一部分。

您需要将父目录插入python路径

但是,请不要这样做。从脚本内部操纵python路径可能是危险的,使用绝对路径会使其不可移植

对于您的项目,创建另一个名为
brp
的文件夹,并在那里创建一个简单的
setup.py
。 应该是这样的

/home/pavarine/Projects/brp   (project root)
    setup.py
    brp/
       __init__.py # can be empty
       config.py
       main.py
       lib/
           __init__.py # can be empty
           Class1.py
首先,
setup.py
可以像

from setuptools import setup, find_packages

setup(
    name='brp',
    packages=find_packages(),
)
然后,您可以使用
pip install.
从根文件夹安装软件包,并在系统上的任何位置使用它,而无需操作
sys.path


如果需要,可以使用pips开发人员模式:
pip install-e。
,这将只创建符号链接,以便项目目录中的更改直接生效,而无需重新安装包。

您需要将父目录插入python路径

但是,请不要这样做。从脚本内部操纵python路径可能是危险的,使用绝对路径会使其不可移植

对于您的项目,创建另一个名为
brp
的文件夹,并在那里创建一个简单的
setup.py
。 应该是这样的

/home/pavarine/Projects/brp   (project root)
    setup.py
    brp/
       __init__.py # can be empty
       config.py
       main.py
       lib/
           __init__.py # can be empty
           Class1.py
首先,
setup.py
可以像

from setuptools import setup, find_packages

setup(
    name='brp',
    packages=find_packages(),
)
然后,您可以使用
pip install.
从根文件夹安装软件包,并在系统上的任何位置使用它,而无需操作
sys.path

如果需要,可以使用pips开发人员模式:
pip install-e.
,这将只创建符号链接,以便项目目录中的更改直接生效,而无需重新安装软件包