我试图使用setuptools从Python3.6应用程序生成一个包。当打包没有错误地终止时,setuptools生成的命令行程序无法导入包中的模块。 以下是我项目的目录树。在
.
├── MANIFEST.in
├── README.md
├── README.rst
├── contributors.txt
├── setup.cfg
├── setup.py
├── sonicparanoid
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── inpyranoid.cpython-36.pyc
│ │ ├── length_difference_filter.cpython-36.pyc
│ │ ├── ortholog_detection.cpython-36.pyc
│ │ ├── reads_stats.cpython-36.pyc
│ │ ├── seq_tools.cpython-36.pyc
│ │ ├── sonicparanoid.cpython-36.pyc
│ │ ├── sys_tools.cpython-36.pyc
│ │ └── workers.cpython-36.pyc
│ ├── bin
│ │ └── mmseqs
│ ├── blast_tools.py
│ ├── compile_inpyranoid_c.py
│ ├── compile_mmseqs_parser_c.py
│ ├── config.json
│ ├── example
│ │ ├── test_input
│ │ │ ├── chlamydia_trachomatis
│ │ │ ├── deinococcus_radiodurans
│ │ │ ├── gloeobacter_violaceus
│ │ │ └── thermotoga_maritima
│ │ └── test_output
│ │ └── README.txt
│ ├── inpyranoid.py
│ ├── inpyranoid_c.c
│ ├── inpyranoid_c.cpython-36m-darwin.so
│ ├── inpyranoid_c.pyx
│ ├── length_difference_filter.py
│ ├── mmseqs2_src
│ │ ├── README.txt
│ │ └── mmseqs.tar.gz
│ ├── mmseqs_parser_c.c
│ ├── mmseqs_parser_c.cpython-36m-darwin.so
│ ├── mmseqs_parser_c.pyx
│ ├── mmseqs_parser_cython.py
│ ├── ortholog_detection.py
│ ├── quick_multi_paranoid
│ │ ├── Makefile
│ │ ├── Makefile.in
│ │ ├── config
│ │ ├── dump.cpp
│ │ ├── gen_header.cpp
│ │ ├── hashtable.c
│ │ ├── hashtable.h
│ │ ├── hashtable.o
│ │ ├── hashtable_itr.c
│ │ ├── hashtable_itr.h
│ │ ├── hashtable_private.h
│ │ ├── ortholog.c
│ │ ├── qa.h
│ │ ├── qa1
│ │ ├── qa1.cpp
│ │ ├── qa2
│ │ ├── qa2.cpp
│ │ ├── qp
│ │ ├── qp.c
│ │ └── qps.c
│ ├── reads_stats.py
│ ├── seq_tools.py
│ ├── setup_sonicparanoid.py
│ ├── sonicparanoid.py
│ ├── sys_tools.py
│ ├── test_blast_tools.py
│ ├── test_length_difference_filter.py
│ ├── test_ortholog_detection.py
│ ├── test_reads_stats.py
│ ├── test_seq_tools.py
│ ├── test_sonicparanoid.py
│ ├── test_sys_tools.py
│ └── workers.py
└── user_manual.pdf
如果我运行python3 sonicparanoid.py
,它可以正常工作,但是如果我使用setuptools创建发行版,那么每当主程序运行时,我都会收到一个导入错误(sonicparanoid.py)尝试导入包(sonicparanoid)目录中的任何其他.py模块。在
以下是我的设置.py公司名称:
^{pr2}$导入语句在sonicparanoid.py
中的外观如下:
import os
import sys
import platform
import seq_tools as seqtools
目前,如果我执行python3 sonicparanoid.py
,一切正常,但是当我使用使用setuptools生成的程序时,我得到以下错误:
Traceback (most recent call last):
File "/usr/local/bin/sonicparanoid", line 11, in <module>
load_entry_point('sonicparanoid==0.0.2', 'console_scripts', 'sonicparanoid')()
File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 572, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2755, in load_entry_point
return ep.load()
File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2408, in load
return self.resolve()
File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2414, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/usr/local/lib/python3.6/site-packages/sonicparanoid-0.0.2-py3.6- macosx-10.13-x86_64.egg/sonicparanoid/sonicparanoid.py", line 5, in <module>
import seq_tools as seqtools
ModuleNotFoundError: No module named 'seq_tools'
我试过使用这个question中提出的解决方案,
但是,如果我用from sonicparanoid import seq_tools as seqtools
更改导入并运行python3 sonicparanoid.py
,我会得到一个导入错误ImportError: cannot import name 'seq_tools'
任何帮助将不胜感激,这是我第一次尝试包装,这是相当令人沮丧。在
Python使用
sys.path
查找模块/包,并将脚本的目录前置到sys.path
的开头。考虑到这一点,让我看看进口的细节。在运行}的目录中。在
python sonicparanoid/sonicparanoid.py
时,Python会将目录sonicparanoid/
添加到sys.path
。现在当目录在sys.path
中时,脚本可以直接导入seq_tools
,因为模块seq_tools.py
位于{当您安装包并运行生成的入口点
sonicparanoid
时,目录sonicparanoid/
不在sys.path
(但其父目录在)中,Python无法导入seq_tools
。您必须将其作为sonicparanoid.seq_tools
导入。但这意味着当您以脚本形式运行sonicparanoid.py
时,不能从sonicparanoid.py
导入它!在{{t{10>从一个点导入的包{t>也不一样。在
另外,脚本的名称不能与Python包的名称相同。当您有一个包
sonicparanoid
和一个脚本sonicparanoid.py
并且脚本尝试import sonicparanoid
-Python尝试从脚本导入(因为它是sys.path
中的第一个),而不是从包中导入,但失败了。在您可以将脚本命名为
sonicparanoid
(没有.py
扩展,Python不会尝试从中导入)或sonic_paranoid.py
,但不能sonicparanoid.py
。在相关问题 更多 >
编程相关推荐